单元测试中抛出异常的Mock方法调用计数为0问题咨询
问题分析与解决方案
你的测试失败完全是因为引用了错误的Mock对象来统计调用次数,和方法抛出异常无关——抛出异常不会中断调用计数的统计,只要方法被调用,call_count就会正常递增。
错误原因
在测试代码中,你通过mocked_blob.return_value得到了Blob实例的Mock对象gcs_blob,并给它的upload_from_string方法设置了异常副作用。但最后你却去统计mocked_blob.upload_from_string.call_count——mocked_blob是Blob类的Mock,它的upload_from_string从未被调用过,真正被调用的是实例Mockgcs_blob上的upload_from_string方法。
修正后的测试代码
把断言行改成引用实例Mock的call_count即可:
self.assertEqual(1, gcs_blob.upload_from_string.call_count)
关于调用计数的说明
unittest.mock.Mock的call_count属性会如实记录该Mock对象被调用的次数,无论调用是否抛出异常(哪怕异常被捕获),只要调用行为发生,计数就会+1。Mock对象的调用跟踪会完整记录所有调用行为,包括引发异常的调用。
内容的提问来源于stack exchange,提问作者user15264046
相关产品推荐
相关产品推荐

