2

假设我有几个这样的测试:

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() 期间。我如何摧毁那个模拟?

我编辑了我的原始问题以添加更多细节,因为看起来不太清楚,对此感到抱歉。

4

2 回答 2

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

于 2014-06-16T16:22:39.587 回答
1

破坏模拟不会这样做。您要么必须重新分配self.my_lib.my_function,要么以不同的方式调用Mock(return_value=True)

第一个是帕特里克似乎建议的。

于 2014-06-16T16:24:14.357 回答