繁体   English   中英

Django模拟无法正常工作

[英]Django mocks not working as expected

我在为django模拟苦苦挣扎; 我什至简化了单元测试,但测试仍然失败。 我想验证是否调用了一个方法(即使带有任何参数),但是“ assert_drawn_once_with”始终返回False。 目前,我正在尝试:

@patch('utils.make_reset_password')
def test_shouldHaveCalledMakeResetToken(self, mocked):
    user = User.get(...)
    make_reset_password(user)
    mocked.assert_called_once_with(user)

即使这个简单的示例也失败了:

AssertionError: Expected 'make_reset_password' to be called once. Called 0 times

这怎么可能? 我究竟做错了什么?

提前致谢

您必须使用utils完整路径,例如@patch('my_app.utils.make_reset_password') ,然后在测试中调用一个调用make_reset_password的函数。

@patch('my_app.utils.make_reset_password')
def test_shouldHaveCalledMakeResetToken(self, mock_make_reset_password):
    user = User.get(...)
    function_under_test(user)
    mock_make_reset_password.assert_called_once_with(user)

编辑

我想到的另一件事是您没有嘲笑正确的功能。 如果make_reset_password是从另一个模块中的utils导入的,则需要更改@patch装饰器中的路径。

例如

# my_module.py
from my_app.utils import make_reset_password

def run_make_reset_password(user):
    make_reset_password(user)


# tests.py
@patch('my_app.my_module.make_reset_password')
def test_shouldHaveCalledMakeResetToken(self, mock_make_reset_password):
    user = User.get(...)
    run_make_reset_password(user)
    mock_make_reset_password.assert_called_once_with(user)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM