创建仅用于测试的模型

时间:2013-10-24 15:04:43

标签: django django-models django-testing

我有一个抽象的用户模型。

测试包括继承此抽象模型并将AUTH_USER_MODEL设置为子类模型。

AUTH_USER_MODEL的问题是它必须是“app-name.model-name”形式,因此必须 引用models.py文件中的模型。但如果它在models.py文件中,它将被同步到生产数据库,这不是完全有害的,但如果不是这样的话会很好。

我见过Django: How to create a model dynamically just for testing,但答案似乎是hackish(并且不可靠?)

目前我所做的是:

/models.py中的

# this model only gets created during a test
if 'test' in sys.argv:
    class AccountTest(AbstractAccount):
        pass 
/ tests / init .py:

中的

@override_settings(
    AUTH_USER_MODEL = '[apps].AccountTest',
)
class AccountManagerTest(TransactionTestCase):

有没有人有更好的方法?这感觉相当hackish。 此外,这种方法有什么问题吗?

1 个答案:

答案 0 :(得分:1)

一种好的方法是为您的测试环境使用单独的设置文件。您可以拥有仅在这些测试设置的INSTALLED_APPS中列出的应用程序,并在那里实现您的测试模型。如果您想使用nose来运行测试等,这种方法也很好......那么你应该像这样运行你的测试:

python manage.py test --settings=my_project.test_settings