我需要测试一个移动文件的方法。我不希望文件移动操作实际发生,我只需要知道正在测试的方法正确调用shutil.move
修补shutil.move
的最佳方法是什么,以便方法可以在不进行实际文件操作的情况下调用它?
我这样做但很难看,我想用模拟库来做:
real_move = ftp2email.shutil.move
move_operations = []
def fake_move(src, dst):
move_operations.append((src, dst))
ftp2email.shutil.move = fake_move
msg_id = '/path/to/message.xml'
self.ch.mark_message(msg_id)
self.assertEqual(move_operations,
[('/path/to/message.xml', '/path/to/archived/message.xml')])
ftp2email.shutil.move = real_move
答案 0 :(得分:1)
您可以尝试使用mox,它可以做到这一点。
来自mox recipes。
def testFoo(self):
self.mox.StubOutWithMock(module_to_mock, 'FunctionToMock')
module_to_mock.FunctionToMock().AndReturn(foo)
self.mox.ReplayAll()
...
self.mox.VerifyAll()
答案 1 :(得分:0)
我使用Mock library
解决了这个问题@mock.patch('%s.ftp2email.shutil.move' % __name__)
def test_mark_message(self, move_mock):
self.ch.mark_message('/path/to/message.xml')
move_mock.assert_called_with('/path/to/message.xml',
'/path/to/archived/message.xml')
这只是一种方法,我也可以使用'with statement'或者调用mock方法启动和停止。