Как я могу издеваться над 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()