我使用unittest
和{
我有这样的东西(这是一个概念证明,可以更清晰地重写,但我的实际代码需要像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()
调用后没有相应地改变,最后一个断言失败。在
如果我在foo()
中使用my_list.remove(x)
,那么我可以看到测试用例中的更改,但我只想清空列表,我不想遍历列表中的每个元素,然后删除它,不,我需要一个快速的空操作。在
我如何在不使用.remove(x)
而使用函数foo
的当前实现的情况下检查我的模拟对象是否被清空?在
所以,我最后回答了我自己的问题。。。在
解决方案是在
foo
中使用my_list[:] = []
。在但是我也意识到传递
create=True
是不好的,因为如果这个列表不存在(正是这个POC的情况),它就会被创建,我可能会测试通过测试的损坏代码。在相关问题 更多 >
编程相关推荐