一般的なテストディレクトリ構造でユニットテストを実行する 質問する

一般的なテストディレクトリ構造でユニットテストを実行する 質問する

単純な Python モジュールでも、ユニット テストを独自のtestディレクトリに分離するのが一般的なディレクトリ構造のようです。

new_project/
    antigravity/
        antigravity.py
    test/
        test_antigravity.py
    setup.py
    etc.

私の質問は、単に、テストを実際に実行する通常の方法は何ですか?これは私以外のすべての人には明らかだと思いますが、モジュールがパス上にないため、python test_antigravity.pyテスト ディレクトリから実行することはできません。import antigravity

PYTHONPATH やその他の検索パス関連のトリックを変更できることはわかっていますが、それが最も簡単な方法だとは思えません。開発者であれば問題ありませんが、テストが合格するかどうかを確認したいだけのユーザーにそれを使用することを期待するのは現実的ではありません。

他の方法としては、テスト ファイルを別のディレクトリにコピーするだけですが、これは少し愚かな方法のように思えますし、そもそもテスト ファイルを別のディレクトリに置くことの意味を理解していないことになります。

では、新しいプロジェクトのソースをダウンロードしただけの場合、単体テストをどのように実行しますか? ユーザーに「単体テストを実行するには、X を実行してください」と伝えられるような回答を希望します。

ベストアンサー1

私の意見では、最善の解決策はunittest コマンドラインインターフェースこれにより、ディレクトリが追加されるのでsys.path、追加する必要はありません (TestLoaderクラスで実行されます)。

たとえば、次のようなディレクトリ構造の場合:

new_project
├── antigravity.py
└── test_antigravity.py

次のコマンドを実行するだけです:

$ cd new_project
$ python -m unittest test_antigravity

あなたのようなディレクトリ構造の場合:

new_project
├── antigravity
│   ├── __init__.py         # make it a package
│   └── antigravity.py
└── test
    ├── __init__.py         # also make test a package
    └── test_antigravity.py

パッケージ内のテスト モジュールでは、通常どおりパッケージとそのモジュールtestをインポートできます。antigravity

# import the package
import antigravity

# import the antigravity module
from antigravity import antigravity

# or an object inside the antigravity module
from antigravity.antigravity import my_object

単一のテスト モジュールを実行する:

この場合、単一のテスト モジュールを実行するには、次のようにしますtest_antigravity.py

$ cd new_project
$ python -m unittest test.test_antigravity

インポートするのと同じ方法でテスト モジュールを参照するだけです。

単一のテスト ケースまたはテスト メソッドを実行する:

TestCaseまた、単一のテスト メソッドを実行することもできます。

$ python -m unittest test.test_antigravity.GravityTestCase
$ python -m unittest test.test_antigravity.GravityTestCase.test_method

すべてのテストを実行しています:

使用することもできますテスト検出すべてのテストを検出して実行します。テストはモジュールまたはパッケージの名前である必要がありますtest*.py(フラグで変更できます-p, --pattern)。

$ cd new_project
$ python -m unittest discover
$ # Also works without discover for Python 3
$ # as suggested by @Burrito in the comments
$ python -m unittest

これにより、パッケージtest*.py内のすべてのモジュールが実行されますtest

ここの更新された公式ドキュメントを見つけることができますdiscovery

おすすめ記事