jal*_*nga 7 python django unit-testing django-queryset django-testing
我有以下功能:
import unittest
from unittest import mock
def get_payments(order):
return order.payments.filter(status='complete').order_by('-date_added)
Run Code Online (Sandbox Code Playgroud)
我想模拟filter方法并order_by检查调用的参数.
我试过了:
class TestPayments(unittest.TestCase):
@mock.patch('path.Order.payments.filter.order_by')
@mock.patch('path.Order.payments.filter')
def test_get_payments(self, mock1, mock2):
mock1.assert_called_with(status='complete')
mock2.assert_called_with('-date_added')
Run Code Online (Sandbox Code Playgroud)
我试过的另一个模拟:
@mock.patch('path.Payment.objects.filter.order_by')
@mock.patch('path.Payment.objects.filter')
@mock.patch('path.Order.payments.objects.filter.order_by')
@mock.patch('path.Order.payments.objects.filter')
Run Code Online (Sandbox Code Playgroud)
在最后两次嘲笑中,我有一个path.Order不存在的错误.我已经使用直接模拟来查询Payment.objects.filter()和工作,但从Order我失败的相关模型开始.
Order和之间的关系Payment是你期望的,一对多.
通过模拟对象我解决了这个问题。
order = MagicMock(side_effect=Order())
order.payments.filter.return_value = MagicMock(side_effect=Payment.objects.filter(id=0))
order.payments.filter.return_value.order_by.return_value = [Payment()]
order.payments.filter.assert_called_with(status='complete')
order.payments.filter.return_value.order_by.assert_called_with('-date_updated')
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2553 次 |
| 最近记录: |