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
的调用是否应该对主进程或文件系统中的某些内容产生影响?如果是这样,您可以改为断言。
我有一个 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
的调用是否应该对主进程或文件系统中的某些内容产生影响?如果是这样,您可以改为断言。