如何修补舒蒂尔。快走测试一些方法

2024-04-19 21:07:41 发布

您现在位置:Python中文网/ 问答频道 /正文

我需要测试一个可以移动文件的方法。我不希望文件移动操作实际发生,我只需要知道被测试的方法对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

Tags: 文件topath方法srcmessagemovemsg
2条回答

你可以尝试使用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()

我用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语句'或调用mock方法start和stop来完成。在

相关问题 更多 >