2011-03-01 159 views
41

现在我有我的Django单元测试生活在mcif/tests.py。我宁愿有更像mcif/tests/foo_test.pymcif/tests/bar_test.py等的东西,但是如果我按照这种方式组织我的测试,Django就会翻转。组织Django单元测试

有没有办法做我想做的事情或做我必须在一个文件中的所有我的测试?

+1

的可能的复制[如何在多个文件传播Django的单元测试?](HTTP://计算器。 com/questions/6248510/how-to-spread-django-unit-tests-over-multiple-files) – 2016-06-07 18:08:43

回答

106

从Django的1.6版本,测试发现机制改变。您不再需要从tests/__init__.py导入所有内容,但现在您必须确保所有包含测试的文件都符合test*.py的模式。

所以,而不必app/tests/models.pyapp/tests/views.py,现在你应该有app/tests/test_models.pyapp/tests/test_views.py

您也可以创建一个名为app/tests/test.py的文件并包含您的其他文件。事情是,跑步者将寻找匹配模式test*.py的文件并执行它们。

+11

Django 1.6。而且'__init __。py'中的输入不再有效。 – davekr 2014-01-07 15:11:41

+2

要添加到此。 创建测试/文件夹添加 __init__.py(无进口) 创建测试/ tests.py(并把进口在那里) 这样,你可以让每个测试文件的测试前缀。如果这是首选 – McP 2014-01-11 20:41:40

+3

也确保tests.py被删除,当测试包正在使用 – f3r3nc 2014-04-22 14:16:16

17

注意:这里描述了Django 1.6之前的行为。见Artur Soler's answer for Django 1.6 and later

做一个包:myapp/tests/

在这个包,把尽可能多的不同的测试模块,只要你想。在tests__init__.py中,从这些模块中导入测试。 (或在这个主题上的一些变化。)

编辑:哇,没有注意到你已经提到一个tests包。

重要的是要从包中获得一切。 Django将从包中获得测试,因此它们必须在__init__.py中可见。

[编辑:关于Django的1.6版添加了注意事项]

+5

从Django 1.6开始不再有效,请参阅下面的回复。 – 2014-01-05 10:24:46

2

在您的__init__.py放像:

from foo_test import * 
from bar_test import * 
+0

包是否必须使用settings.py注册? – 2012-11-06 19:40:22

+0

当你有一个名叫''__init __。py'''的文件时,这个文件夹将作为一个模块。只要文件夹的父节点在python的'''sys.path'''中,那么'''settings.py'''中不需要额外的“注册”,只需导入并使用。 – Evgeny 2012-11-07 10:21:43

+0

我在我的应用程序和'__inti __。py'中设置了一个测试包,我导入了两个模块 - 'tests.py'和'selenium_tests.py'。但是,我如何选择只运行硒测试?我试过'./manage.py测试myapp。selenium_tests'或者'./manage.py测试myapp.tests.slenium_tests',但它不能识别它们。 – 2012-11-07 17:28:46

1

只需添加到Artur Soler的伟大answer ...

您还可以使用--pattern选项来指定测试文件的命名方式。

例如,如果您的测试文件被命名为foo_test.pybar_test.py和类似的,你可以使用:

$ ./manage.py test --pattern="*_test.py"