【发布时间】:2018-06-25 10:32:38
【问题描述】:
我正在使用 Python 的模拟库和 unittest。我正在为一个在其方法之一中使用外部库函数的类编写单元测试。根据不同的情况,这个函数返回不同的值。
假设我想测试 A 类:
from external_library import function_foo
class A(object):
...
在我的测试类中,为了使用函数从外部库返回的值,我创建了一个补丁,并且在定义补丁后才导入类 A。但是,我需要在我所有的测试方法中使用这个函数,并且在每个方法中它返回不同的值。
我的测试类如下:
class TestA(TestCase):
@patch('external_library.function_foo', side_effect=[1, 2, 3])
def test_1(self, *patches):
from module import class A
obj = A()
...
@patch('external_library.function_foo', side_effect=[1, 1, 2, 2, 3, 3])
def test_2(self, *patches):
from module import class A
obj = A()
...
...
我有 10 个测试,当我一起运行所有测试时,只有 1 个(第一个)通过,其余的,我得到 StopIteration 错误。但是,如果我单独运行它们中的每一个,它们都会通过。
我尝试在每种方法中使用with patch('external_library.function_foo', side_effect=[...]),但结果是一样的。我还尝试在setUp 方法中只创建一次补丁,启动它,在每个方法中重新分配side_effect,然后在tearDown 中停止,但它不起作用。
对在这种情况下可能起作用的任何想法?
谢谢!
【问题讨论】:
标签: python unit-testing mocking python-unittest