我正在使用unittest
and mock
(Michael Foord 的模块)来测试一些 python 代码。
我有这样的东西(这是一个可以更干净地重写的概念证明,但我的真实代码需要表现得像那个foo
函数):
import unittest
from mock import patch
def foo():
my_list = []
class Test(unittest.TestCase):
def test_foo(self):
with patch('__main__.my_list', new=[], create=True) as baz:
baz.extend(['foo', 'bar'])
self.assertEqual(foo(), None)
self.assertListEqual([], baz)
if __name__ == '__main__':
unittest.main()
所以问题是我的baz
模拟对象在调用后没有相应地改变,foo()
最后一个断言失败。
如果我使用my_list.remove(x)
infoo()
那么我可以看到我的测试用例中的更改,但我只想清空该列表,我不想通过列表的每个元素然后将其删除,不,我想要一个快速的清空操作。
如何检查我的模拟对象是否在没有使用.remove(x)
但使用当前实现的函数的情况下被清空foo
?