Как я могу высмеять exists()
для определенных путей только при том, что это делает реальную вещь для любого другого пути?Python Mox: Как подделать os.path.exists() только для определенных путей?
Например, тестируемый класс вызовет exists()
и завершит сбой на путях, которые были ему предоставлены, поскольку они не существуют в системе, где выполняются тесты.
С Mox можно полностью отключить exists()
, но это приведет к сбою теста, потому что вызовы, не связанные с тестируемым классом, не будут действовать в реальном режиме.
Я думаю, я мог бы использовать WithSideEffects()
, чтобы вызвать свою собственную функцию, когда exists()
называется разветвлением вызова в двух направлениях, но как я могу получить доступ к оригиналу exists()
?
Это то, что я до сих пор:
def test_with_os_path_exists_partially_mocked(self):
self.mox.StubOutWithMock(os.path, 'exists')
def exists(path):
if not re.match("^/test-path.*$", path):
return call_original_exists_somehow(path)
else:
# /test-path should always exist
return True
os.path.exists(mox.Regex("^.*$")).MultipleTimes().WithSideEffects(exists)
self.mox.ReplayAll()
under_test.run()
self.mox.VerifyAll()