2011-03-01 119 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"