Я не утверждаю, что это лучшее решение, но оно пригодно для тестирования. Это похоже на насмешку над медленной операцией, но более явное и тестирует функцию, используя ее определенный интерфейс, вместо того, чтобы делать предположения о том, что надо смоделировать в зависимости от реализации.
Вместо жесткого кодирования длинной, медленной операции, установите аргумент для reassign_path
.
class FileHandler(object):
def __init__(self, file_path):
self.file_path = file_path
def reassign_path(self, new_path, f=FileHandler.run_long_operation):
self.file_path = new_path
f(self, self.file_path)
Теперь вы можете быстро проверить reassign_path
, передав другую, более быструю функцию в качестве второго аргумента:
def test_reassign_path_quickly(self):
fh = FileHandler('/old/path')
fh.reassign_path('/new/path', lambda *args: None)
self.assertEquals(fh.file_path, '/new/path')