在python单元中记录和断言空的模拟列表

2024-06-10 23:27:08 发布

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

我使用unittest和{}(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()调用后没有相应地改变,最后一个断言失败。在

如果我在foo()中使用my_list.remove(x),那么我可以看到测试用例中的更改,但我只想清空列表,我不想遍历列表中的每个元素,然后删除它,不,我需要一个快速的空操作。在

我如何在不使用.remove(x)而使用函数foo的当前实现的情况下检查我的模拟对象是否被清空?在


Tags: 对象函数代码importselffoomainmy
1条回答
网友
1楼 · 发布于 2024-06-10 23:27:08

所以,我最后回答了我自己的问题。。。在

解决方案是在foo中使用my_list[:] = []。在

但是我也意识到传递create=True是不好的,因为如果这个列表不存在(正是这个POC的情况),它就会被创建,我可能会测试通过测试的损坏代码。在

相关问题 更多 >