通常,当我为 Django 项目编写测试时,我必须编写比实际测试被测对象更多的代码来设置数据库记录。目前,我尝试使用测试装置来存储相关字段,但是我可以使用模拟对象来模拟需要大量工作来设置的相关表吗?
这是一个简单的例子。我想测试一个Person对象是否会spawn()根据其健康状况生成子对象。
在这种情况下,一个人的城市是必填字段,所以我必须先设置一个城市,然后才能创建一个人,尽管城市与该spawn()方法完全无关。我怎样才能简化这个测试而不需要创建一个城市?(在一个典型的示例中,不相关但必需的设置可能是数十或数百条记录,而不仅仅是一条。)
# Tested with Django 1.9.2
import sys
import django
from django.apps import apps
from django.apps.config import AppConfig
from django.conf import settings
from django.db import connections, models, DEFAULT_DB_ALIAS
from django.db.models.base import ModelBase
NAME = 'udjango'
def main():
setup()
class City(models.Model):
name = models.CharField(max_length=100)
class Person(models.Model):
name = models.CharField(max_length=50)
city = models.ForeignKey(City, related_name='residents')
health = models.IntegerField()
def spawn(self):
for i in range(self.health):
self.children.create(name='Child{}'.format(i))
class Child(models.Model):
parent = models.ForeignKey(Person, related_name='children')
name = …Run Code Online (Sandbox Code Playgroud)