如何解决打印语句执行但函数调用失败 assert_call 后直接调用
tl;dr:我知道我正在使用 unittest 测试的代码块由于打印语句而正在执行,但是在打印语句之后的一个函数未通过 assert_call 检查。运行代码时,函数按预期被调用和执行。不清楚测试失败的原因。
正在测试的函数中的代码:
from path.to import deliver_error
def handle_error(ARGS):
if HANDLE_ERROR_BOOL:
print('calling deliver_error')
deliver_error(ARGS)
else:
# do something else
测试代码:
class TestSampleRegistration(unittest.TestCase):
def setUp():
# mock deliver_error
mock_deliver_error_patch = patch("path.to.deliver_error",autospec=True)
self.mock_deliver_error = mock_deliver_error_patch.start()
self.addCleanup(mock_deliver_error_patch.stop)
def test_handle_error(self):
main.HANDLE_ERROR_BOOL = True
handle_error(ARGS)
self.mock_deliver_error.assert_called() # point of failure
断言失败:
AssertionError: Expected 'deliver_error' to have been called.
捕获的标准输出:
Captured stdout for test_main.MyTestClass.test_handle_error
calling deliver_error
我知道:
- HANDLE_ERROR_BOOL 设置正确(打印语句执行并显示在标准输出中)
- deliver_error 应该被调用,因为在print语句和deliver_error调用之间没有任何东西,并且正在执行print语句
- 在运行实际代码时,函数正在按预期执行
那么为什么 assert_called 测试失败了呢?非常感谢帮助,谢谢!
解决方法
为了可能看到这篇文章的其他人而回答:
根据 MrBean Bremen 的评论,决议是从
更新模拟class TestSampleRegistration(unittest.TestCase):
def setUp():
# mock deliver_error
mock_deliver_error_patch = patch("path.to.deliver_error",autospec=True)
到
class TestSampleRegistration(unittest.TestCase):
def setUp():
# mock deliver_error
mock_deliver_error_patch = patch("mymodule.deliver_error",autospec=True)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。