我们说我有几个这样的测试:
class TestMyTest(unittest.TestCase):
def SetUpClass(cls):
cls.my_lib = MyLib()
def my_first_test(self):
self.my_lib.my_function = Mock(return_value=True)
self.assertTrue(self.my_lib.run_my_function(), 'my function failed')
def my_second_test(self):
# Some other test that calls self.my_lib.my_function...
让我们说我在MyLib中有类似的东西:
class MyLib(Object):
def my_function(self):
# This function does a whole bunch of stuff using an external API
# ...
def run_my_function(self):
result = self.my_function()
# Does some more stuff
# ...
在my_first_test中,我正在模拟my_lib.my_function并在执行函数时返回True。在这个例子中,我的断言是调用run_my_function(),它是来自同一个库的另一个函数,除其他外,它调用my_lib.my_function。但是当执行my_second_test时,我不希望调用模拟函数,而是真实调用函数。所以我想我需要在运行my_first_test之后以某种方式销毁模拟,也许在tearDown()期间。我如何销毁那个模拟器?
我编辑了原始问题以添加更多详细信息,因为它看起来不那么清楚,抱歉。
答案 0 :(得分:2)
你可以这样做:
class TestYourLib(unittest.TestCase):
def setUp(self):
self.my_lib = MyLib()
def test_my_first_test(self):
self.my_lib.my_function = Mock(return_value=True)
self.assertTrue(self.run_my_function(), 'my function failed')
def test_my_second_test(self):
# Some other test that calls self.my_lib.my_function...
然后,当为下一个测试用例调用Mock
时超出范围,setUp
被“销毁”。
答案 1 :(得分:1)
销毁模拟器不会这样做。您必须以不同的方式重新分配self.my_lib.my_function
或致电Mock(return_value=True)
。
第一个是帕特里克似乎建议的。