我的Django项目中有一个实用程序函数,它接受一个查询集,从中获取一些数据并返回结果.我想为这个函数写一些测试.有没有'mock'一个QuerySet?我想创建一个不接触数据库的对象,我可以为它提供一个值列表(即一些假行),然后它就像一个查询集,并允许某人对它进行字段查找/过滤/获取/全部等.
有这样的事情吗?
我试图在Djangos model.Manager()类上模拟一个链式调用.现在我想嘲笑values()和filter()方法.
为了测试我创建了一个小测试项目:
pip install django mock mock-django nose django-nosedjango-admin.py startproject mocktestmanage.py startapp mockmedjango_nose和mocktest.mockme以INSTALLED_APPS(settings.py)TEST_RUNNER = 'django_nose.NoseTestSuiteRunner'到settings.py为了确保所有设置都正确,我跑了manage.py test.运行一个测试,Django在您创建应用程序时创建的标准测试.
我做的下一件事是创建一个非常简单的模型.
mockme/models.py
from django.db import models
class MyModel(models.Model):
name = models.CharField(max_length=50)
Run Code Online (Sandbox Code Playgroud)
我做的下一件事是创建一个使用的简单函数MyModel.这是我想要稍后测试的功能.
mockme/functions.py
from models import MyModel
def chained_query():
return MyModel.objects.values('name').filter(name='Frank')
Run Code Online (Sandbox Code Playgroud)
这里没有什么特别的事情发生.该函数正在过滤MyModel对象以查找其中的所有实例name='Frank'.对values()的调用将返回一个ValuesQuerySet只包含所有找到的MyModel实例的name字段的内容.
mockme/tests.py
import mock
from django.test import TestCase
from mocktest.mockme.models import MyModel …Run Code Online (Sandbox Code Playgroud)