问题描述
我已经尝试过了:
def test_send_confirm_hit(monkeypatch):
hit = False
def called():
global hit
hit = True
monkeypatch.setattr("web.email.send_confirm",called)
# ... some event that will cause web.email.send_confirm to be hit
assert hit # verify send_confirm was hit
解决方法
如果您使用“适当的”模拟,它会附带一个.assert_called()
method:
import unittest.mock
def test_send_confirm_hit(monkeypatch):
mock_send_confirm = unittest.mock.Mock()
monkeypatch.setattr("web.email.send_confirm",mock_send_confirm)
# ... some event that will cause web.email.send_confirm to be hit
mock_send_confirm.assert_called()
,
您可以使用Mock代替函数:
from unittest.mock import MagicMock
def test_send_confirm_hit(monkeypatch):
called = MagicMock()
monkeypatch.setattr("web.email.send_confirm",called)
# ... some event that will cause web.email.send_confirm to be hit
assert called.call_count == 1 # verify send_confirm was hit
如果您确实需要执行一些自定义逻辑(例如对函数进行处理),则可以在模拟对象中添加side_effect
:
def test_send_confirm_hit(monkeypatch):
def side_effect():
return 42
called = MagicMock(side_effect=side_effect)