Django嘲笑不按预期工作

时间:2018-04-02 09:06:28

标签: python django mocking django-testing python-mock

我正在与django mock挣扎;我甚至简化了单元测试,但测试仍然失败。我想验证一个方法是否被调用(即使使用任何参数),但“assert_called_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

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

提前致谢

1 个答案:

答案 0 :(得分:1)

您必须使用Chrome 65.0.3325 (Mac OS X 10.13.3): Executed 1 of 1 SUCCESS (0.034 secs / 0.011 secs) TOTAL: 1 SUCCESS 的完整路径,例如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