0

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

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

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

我见过Django: How to create a model dynamic just for testing但答案似乎很骇人听闻(而且不可靠?)

目前我做的是:

在 [apps]/models.py 中:

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

在 [apps]/tests/ init .py 中:

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

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

4

1 回答 1

1

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

python manage.py test --settings=my_project.test_settings
于 2013-10-24T15:38:39.773 回答