【发布时间】:2018-04-16 07:20:03
【问题描述】:
我有以下功能:
import unittest
from unittest import mock
def get_payments(order):
return order.payments.filter(status='complete').order_by('-date_added)
我想模拟 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')
我尝试的另一个模拟:
@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')
在最后两个模拟中,我有一个错误,path.Order 不存在。
我已经对Payment.objects.filter() 之类的查询使用了直接模拟并且正在工作,但是从Order 之类的相关模型开始我失败了。
Order 和 Payment 之间的关系是您所期望的,一对多。
【问题讨论】:
-
你可以使用 django
TestCase代替 python 的 unittest。https://docs.djangoproject.com/en/1.11/topics/testing/overview/ -
我正在使用 TestCase。你的链接也失效了。
标签: python django unit-testing django-queryset django-testing