我正在使用 Python 的模拟库和单元测试。我正在为一个类编写单元测试,该类在其方法之一中使用外部库的函数。根据情况,该函数返回不同的值。
假设我想测试 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
,但没有成功。
关于在这种情况下可行的任何想法吗?
Thanks!