【发布时间】:2021-06-25 15:11:25
【问题描述】:
我正在寻找一种在同一测试中模拟 Django 查询集结果和计数结果的方法。 请在下面找到代码 sn-p 以概述我尝试做的事情。这不是真正的代码,只是一个没有什么有趣的简化版本。
# METHOD
def method_to_mock(car_ids):
cars = Car.objects.filter(id__in=car_ids).order_by("creation_date")
if cars.count() != len(car_ids):
missing_cars = set(car_ids) - set(cars.values_list("id", flat=True))
logger.error(f"Failed to retrieve cars {missing_cars}.")
for car in cars:
print(car.brand)
# TESTING
mock_filter = mocker.patch("Car.objects")
mock_filter.filter.return_value.order_by.return_value = [mocker.Mock(), mocker.Mock()]
mock_filter.filter.return_value.order_by.return_value.count.return_value = 2
method_to_mock([0, 1, 2])
这不起作用,因为模拟列表没有计数方法。我不想返回 Mock 而不是 Mock 列表,因为我仍然希望能够循环遍历这些模拟。
你能帮忙吗?
谢谢!
【问题讨论】:
标签: python django mocking django-queryset