./manage.py test app
を介してテストを実行しています今..
tests.py
ファイルはかなり大きく/複雑/乱雑になっていますtests.py
をテストの小さなコレクションに分割したい...どうやって?
Django 1.6で動作が変更されたため、パッケージを作成する必要がなくなりました。ファイルにtest*.py
。
テストを実行すると、テストユーティリティのデフォルトの動作では、名前がtestで始まるファイル内のすべてのテストケース(つまり、unittest.TestCaseのサブクラス)が検索され、それらのテストケースからテストスイートが自動的に構築されます。そのスイートを実行します。
テスト検出は、unittestモジュールの組み込みテスト検出に基づいています。デフォルトでは、現在の作業ディレクトリの下にある「test * .py」という名前のファイルでテストが検出されます。
以前の動作 from Django 1.5 documentation :
テストを実行すると、テストユーティリティのデフォルトの動作では、models.pyおよびtests.pyですべてのテストケース(つまり、unittest.TestCaseのサブクラス)が検索され、それらのテストケースからテストスイートが自動的に構築されます。そのスイートを実行します。
モジュールのテストスイートを定義する2番目の方法があります。models.pyまたはtests.pyのいずれかでsuite()という関数を定義すると、Djangoテストランナーはその関数を使用しますこのモジュールのテストスイートを作成します。これは、単体テストの推奨構成に従います。複雑なテストスイートの作成方法の詳細については、Pythonドキュメントを参照してください。
このアプローチは、Django 1.6、これを参照してください post 。
内部に___init___.py
を持つtests
フォルダーを作成できます(パッケージになるように)。次に、分割テストの.pyファイルをそこに追加し、___init___.py
にすべてインポートします。
つまり:test.py
ファイルを、ファイルのように見えて動作するモジュールに置き換えます。
問題のアプリの下にtests
ディレクトリを作成します
app app\models.py app\views.py app\tests app\tests\__ init __。py app\tests\bananas.py app\tests\apples.py
サブモジュールをapp\tests\__init__.py
にインポートします。
from bananas import *
from apples import *
これで、すべてが単一のファイルにあるかのように./manage.pyを使用できます。
./manage.py test app.some_test_in_bananas
トマスが述べた答えは正しい。ただし、__init__.py
のインポートがファイル構造と一致するようにするのは面倒です。
フォルダー内のすべてのテストを自動的に検出するにこれを__init__.py
に追加できます:
import unittest
def suite():
return unittest.TestLoader().discover("appname.tests", pattern="*.py")
これにより、./manage.py test appname
を実行できますが、特定のテストの実行は処理されません。これを行うには、次のコードを使用できます(__init__.py
でも):
import pkgutil
import unittest
for loader, module_name, is_pkg in pkgutil.walk_packages(__path__):
module = loader.find_module(module_name).load_module(module_name)
for name in dir(module):
obj = getattr(module, name)
if isinstance(obj, type) and issubclass(obj, unittest.case.TestCase):
exec ('%s = obj' % obj.__name__)
これで、すべてのテストをmanage.py test app
経由で、または特定のテストをmanage.py test app.TestApples
経由で実行できます
次のようなディレクトリ構造を作成します。
myapp/
__init__.py
tests/
__init__.py
test_one.py
test_two.py
...
...
そしてpython manage.py test myapp
は期待どおりに機能します。
http://docs.python.org/library/unittest.html#organizing-tests は、ファイルをモジュールに分割することについて説明しています。そのすぐ上のセクションに例があります。
より複雑な設定がある場合、またはfrom ... import *
- typeステートメントを使用したくない場合は、tests.py(またはtests/__ init__.py)でsuite
という関数を定義できます。 unittest.TestSuite
のインスタンスを返します。
Django 2.2を使用すると、アプリ内にtest
フォルダーを作成して、関連するtest_...py
ファイルに、追加するだけ__init__.py
をtest
フォルダーに。
Initで何もコーディングする必要はありません。アプリにサブディレクトリを作成するだけです。唯一の要件はtests *と呼ばないこと For exemple
app/
app/__init_.py
app/serializers.py
app/testing/
app/testing/__init__.py
app/testing/tests_serializers.py
おもう ./manage.py test
は、単にすべてのテストトリックを実行します(Django> = 1.7))。
テストの整理が約グループ化およびcherrypickingそして、あなたはnose
のファンです Django nose :
python manage.py test another.test:TestCase.test_method
鼻を知っているなら、あなたはあなたのすべてのファイルをはるかにうまく「ワイルドカード」する方法を知っています。
PS
それはちょうど良い習慣です。お役に立てば幸いです。答えはここから借りました: 特定のテストケースをDjangoで実行