簡體   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