python 正确地模拟了一个函数,但是没有计算调用次数

python mocks a function properly, however the call count is not accounted

我有一个 class 如下所示:

Class a:
    def fn1(self):
        p1=multiprocessing.Process(self.fn2, (arg1,)
        p1.start()
        p1.join()
    def fn2(self, arg1):
        …

我正在尝试测试它并且我已经模拟了 self.fn2 调用:

测试:

Class aTest(unittest.TestCase):
    def testfn1(self):
        a obj1
        obj1.fn2 = MagicMock.mock()
        obj1.fn1()
        obj1.fn2.assert_called_once_with(arg1)

当我 运行 测试时,我注意到 fn2 函数(我在那里没有看到调试信息)已被模拟。但是,call_count 为 0。如何进一步调试?

该函数 运行 在与主进程不同的进程中。所以你的主进程没有self.fn2被调用的记录

如果您想继续这条路线,这个图书馆可能适合您。它在进程之间同步模拟的状态。 https://github.com/elritsch/python-sharedmock


但是:我鼓励您采用“GIVEN, THEN, WHEN”的方法来编写您的测试 - 这可能会让您更容易看出什么是合适的测试,并且意味着您不再需要用于多处理安全 MagicMock 实现。您尝试验证的代码的实际行为是什么?如何将其转换为断言?

要在此处测试所需的行为,也许您可​​以针对一组不同的标准进行断言。例如,对 self.fn2 的调用是否应该对主进程或文件系统中的某些内容产生影响?如果是这样,您可以改为断言。