有没有更好的方法来创建测试对象来表示 Django 应用程序中的 PostgreSQL 查找表?我有三个表,其中第一个是来自 django.contrib.auth.models 的用户模型。第二个表是 UserAccount,它与 User 是一对一的关系:
# models.py
class UserAccount(models.Model):
user = models.OneToOneField(User, primary_key=True, unique=True)
user_type = models.ForeignKey('UserType')
第三个表是与 UserAccount 具有一对多关系的查找表。它存储 UserAccount 引用的用户类型,并预先填充了注释中显示的三行:
# models.py
class UserType(models.Model):
user_type_cd = models.CharField(max_length=4) # 'cpl', 'sm', 'sf'
descrip = models.CharField(max_length=75) # 'couple', 'single male', 'single female'
我正在使用 factory_boy 来代表我的测试用户:
# factories.py
import factory
from django.contrib.auth.models import User
class UserFactory(factory.django.DjangoModelFactory):
FACTORY_FOR = User
username = 'testuser'
email = 'testuser@example.com'
password = 'testpass'
这是我的测试:
# model_tests.py
from django.contrib.auth.models import User
from django.test import TestCase
from tests.signup.factories import UserFactory
from app.models import UserAccount, UserType
class TestUserAccountModel(TestCase):
def setUp(self):
self.user = UserFactory.build()
self.user_type = UserType.objects.get(user_type_cd='cpl') # <= hits the database!
def test_valid_user_account(self):
ua = UserAccount(user=self.user, user_type=self.user_type)
self.assertTrue(isinstance(ua, UserAccount))
我在这个测试中遇到的问题是它运行缓慢,因为我必须在 setUp 中访问数据库来查找用户类型。我不能用工厂(我不认为)来表示 UserType 类,因为它已经被填充了。有没有更好的方法来构建这个测试,特别是让它运行得更快的方法?这应该是一个单元测试,所以我希望它尽可能快地运行。谢谢。