django TestCase 中的夹具继承
Fixture inheritance in django TestCase
我有一个非常简单的场景
from django.test import TestCase
class BaseTest(TestCase):
fixtures = ('users.json',)
...
class SpecificTest(BaseTest):
fixtures = ('transactions.json',)
...
transactions 对用户有一个 FK,当 SpecificTest 尝试加载 fixtures 我得到一个 IntegrityError
IntegrityError: Problem installing fixtures:
The row in table 'app_transactions' with primary key '1' has an
invalid foreign key: app_transactions.user_id contains a value '30'
that does not have a corresponding value in app_user.id.
此错误意味着 BaseTest
中加载的 users.json
夹具未在 transactions.json
夹具之前加载(如您所料)。我的问题是,子类化测试时加载固定装置的正确方法是什么?
Django 1.7
当您在子类中覆盖 fixtures
时,它 替换 固定装置,而不是扩展它们。
您可以明确重复固定装置:
class SpecificTest(BaseTest):
fixtures = ('users.json', 'transactions.json',)
或在您的子类中参考 BaseTest.fixtures
:
class SpecificTest(BaseTest):
fixtures = BaseTest.fixtures + ('transactions.json',)
我有一个非常简单的场景
from django.test import TestCase
class BaseTest(TestCase):
fixtures = ('users.json',)
...
class SpecificTest(BaseTest):
fixtures = ('transactions.json',)
...
transactions 对用户有一个 FK,当 SpecificTest 尝试加载 fixtures 我得到一个 IntegrityError
IntegrityError: Problem installing fixtures:
The row in table 'app_transactions' with primary key '1' has an
invalid foreign key: app_transactions.user_id contains a value '30'
that does not have a corresponding value in app_user.id.
此错误意味着 BaseTest
中加载的 users.json
夹具未在 transactions.json
夹具之前加载(如您所料)。我的问题是,子类化测试时加载固定装置的正确方法是什么?
Django 1.7
当您在子类中覆盖 fixtures
时,它 替换 固定装置,而不是扩展它们。
您可以明确重复固定装置:
class SpecificTest(BaseTest):
fixtures = ('users.json', 'transactions.json',)
或在您的子类中参考 BaseTest.fixtures
:
class SpecificTest(BaseTest):
fixtures = BaseTest.fixtures + ('transactions.json',)