2

機能テストと単体テストを分離するために、Django アプリのディレクトリ構造をセットアップしています。Django プロジェクトのテスト ランナーとして、nose を使用しています。

Django プロジェクトのルートには、次の構造を持つ「tests」というフォルダーがあります。

tests
├── __init__.py
├── functional
│   ├── __init__.py
└── unit
    ├── __init__.py
    ├── data.py
    ├── tests.py

単体テストだけを実行したい場合、プロジェクト ルートから以下を使用できないはずです。

$ nosetests tests.unit

----------------------------------------------------------------------
Ran 0 tests in 0.000s

OK

ご覧のとおり、tests.py ファイルでテストが見つかりません。

ただし、ディレクトリ構造を使用して実行すると、テストは次のように検出されます。

$ nosetests tests/unit/
E
# .. Some errors I expected because settings are not initialized when called this way
-----------------
Ran 1 test in 0.001s

FAILED (errors=1)

私は何が欠けていますか?私の主な問題は、今後のテストのためにテスト DB にデータを作成するために呼び出されるsetup関数があることです。tests.unit.__init__.py

ありがとう

4

1 に答える 1

3

これはすべて、コードの種類に依存しますtests/unit/__init__.py

あなたが言う時

nosetests tests.unit

unit/__init__.pyディレクトリを指していないため、モジュールにunit/テストがない場合は何も実行されません。__init__.pyそのため、ディレクトリ パスを使用してからテストが機能し始めたと言うのは理解できます。

あなたが言及する

私は何が欠けていますか?私の主な問題は、tests.unit にセットアップ機能があることです。今後のテスト用にテスト DB にデータを作成するために呼び出される必要があるinit .py。

にセットアップ関数があって__init__.pyも、テスト関数を にインポートしたことがない可能性があります。__init__.py

これに対する1つの簡単な修正は、この行を追加することです__init__.py

from tests.unit.tests import *

とはいえ、コードをまったく入れるのはあまり賢明ではありません。__init__.pyなんらかの構成データを返すコードがある場合は、構成データをテストに返す関数を含む新しいライブラリ モジュールを作成することをお勧めします。

于 2013-08-10T08:48:51.033 に答える