Django 有没有一种方法可以统一测试传递给Model或Q对象的参数?

Django 有没有一种方法可以统一测试传递给Model或Q对象的参数?,django,pytest,python-unittest,django-q,Django,Pytest,Python Unittest,Django Q,在我的单元测试中,我了解如何根据上下文模拟对象,以避免与任何类型的持久数据存储交互 我甚至可以模拟Q对象来测试它被调用了多少次,这非常有用 但我仍然对这样一个事实感到不安,即当我模拟与数据存储的交互时,我仍然假设我的代码可以工作,数据存储(或本例中的ORM)可以通过“适当的通道”正确地接收数据 例如: # code to test def related_stuff(): return Stuff.objects.filter( parent__user__city_name=&

在我的单元测试中,我了解如何根据上下文模拟对象,以避免与任何类型的持久数据存储交互

我甚至可以模拟Q对象来测试它被调用了多少次,这非常有用

但我仍然对这样一个事实感到不安,即当我模拟与数据存储的交互时,我仍然假设我的代码可以工作,数据存储(或本例中的ORM)可以通过“适当的通道”正确地接收数据

例如:

# code to test
def related_stuff():
   return Stuff.objects.filter(
     parent__user__city_name="Las Vegas"
   )
   # more code...


 # testing above
 @mock.patch(f"{path_to}.Stuff.objects")
 def test_related_stuff(stuff_mock):
   stuff_mock.filter.return_value = stuff_mock
   stuff_mock.filter.assert_called_once_with(parent__user__city_name="Las Vegas")

我如何才能真正测试
父用户城市名称
查找模式是否正确且不会导致错误?我假设在不接触数据存储的情况下无法对此进行测试,但任何意见都会受到欢迎。

您可以确保数据库连接到内存sqlite实例,或者编写Djangon数据库适配器,在尝试查询时清除错误(或始终返回空数据集)

使用总是不返回任何内容的适配器,您至少可以测试查询是否正常工作