3

バックグラウンド:

次のdjangoプロジェクトのセットアップがあります:

>TopLevel:
>  - App1:
>      * models.py
>      * forms.py
>      * views.py
>      * __init__.py
>      * Tests/
>        * __init__.py
>        * test_simple.py

test_simple.py のコードは次のとおりです。

from django.test import TestCase


class SimpleTest(TestCase):
    def test_basic_addition(self):
        """
        Tests that 1 + 1 always equals 2.
        """
        self.assertEqual(1 + 1, 2)

今、私が実行すると:

> python manage.py test app1

次の出力が得られます。

>Creating test database for alias 'default'...
>
>----------------------------------------------------------------------
>Ran 0 tests in 0.000s
>
>OK
>Destroying test database for alias 'default'...

しかし、代わりに次のプロジェクト構造を使用すると:

>TopLevel:
>  - App1:
>      * models.py
>      * forms.py
>      * views.py
>      * __init__.py
>      * tests.py

tests.py には次のコードがあります。

from django.test import TestCase


class SimpleTest(TestCase):
    def test_basic_addition(self):
        """
        Tests that 1 + 1 always equals 2.
        """
        self.assertEqual(1 + 1, 2)

今、私が実行すると:

> python manage.py test app1

私は得る:

>Creating test database for alias 'default'...
>.
>----------------------------------------------------------------------
>Ran 1 test in 0.002s
>
>OK
>Destroying test database for alias 'default'...

質問:

Django が Tests ディレクトリを認識しないのはなぜ && Tests/ 内にリストされているテストが、Django の unittest 構造によって取得されて実行されないのはなぜですか?

4

3 に答える 3

2

django 1.5 AFAIKまで、すべてのテストをに変更Teststestsてインポートする必要があります。tests/__init__.pyまた、unittest2 ディスカバリーのように動作するテスト ランナーもあります。この機能は django1.6 に統合されました。

于 2013-08-31T18:05:38.073 に答える
2

ぐっすり眠り、テストの発見についても考えないための 1 つのオプションは、を使用することです。多くの機能があり、そのうちの 1 つは自動テスト検出です。

djangoプロジェクトをnoseと統合するのに役立つdjango_noseというパッケージがあります。

特徴

Django テストでの鼻の良さはすべて...

  • ...
  • すべてのテストを にインポートする必要がなくなりますtests/__init__.py。これにより、忙しい作業が省けるだけでなく、誤ってテスト クラスをシャドウイングする可能性がなくなります。
  • ...

それが役立つことを願っています。

于 2013-08-31T18:02:59.233 に答える