web-dev-qa-db-ja.com

Pythonユニットテストと発見

次のような名前のファイルを含むディレクトリがあります:test_foo.py

各ファイルはテストケースです。

私はしたいと思います

1)コマンドラインからディレクトリ内のすべてのテストを実行します。使っています unittest2、実行中なのでPython 2.5.1。これらのディレクトリの1つから、コマンドラインで次のように入力してみます。

python -m unittest2 discover -p 'test_*.py'

といくつかの異なるバリアント。エラーは出ませんが、何も起こりません。そのディレクトリ内のすべてのテストケース内のすべてのテストが実行され、結果が得られることを期待していました。

2)私もこれを行ったディレクトリにスクリプトを置いてみました:

loader = unittest2.TestLoader()
t = loader.discover('.')

t変数を出力すると、テストケースは表示されますが、ドキュメントからは、ローダーオブジェクトを取得したらどうするかわかりません。

38
Aaron

python -m unittest discoverを実行すると、同じ問題が発生しました。これは、設定を確認するための適切なチェックリストです。 Noseは、許可された構成でより柔軟ですが、必ずしも優れているとは限りません。

  1. すべてのファイル/ディレクトリがtestで始まることを確認してください。実行nottest-something.pyを使用してください。これは有効ではないため、pythonモジュール名です。test_something.pyを使用してください。

  2. テストをサブディレクトリ(test/など)に配置する場合は、必ずtest/__init__.pyファイルを作成して、pythonがディレクトリをパッケージとして扱うようにします。

  3. すべてのクラステストケース定義は、unittest.TestCaseを拡張する必要があります。例えば

    class DataFormatTests(unittest.TestCase)
    
57
cmcginty

テストを見つけたら、テストランナーで実行できます。

python 2の場合:

import unittest2
loader = unittest2.TestLoader()
tests = loader.discover('.')
testRunner = unittest2.runner.TextTestRunner()
testRunner.run(tests)

python 3の場合:

import unittest
loader = unittest.TestLoader()
tests = loader.discover('.')
testRunner = unittest.runner.TextTestRunner()
testRunner.run(tests)

上記のコードを実行すると、テスト結果が標準出力に出力されます。

48
kortina

Python unittest2のコマンドラインから< 2.7を使用しようとしている方法を教えてください。見逃した可能性があります unittest2 PyPIページ

注意

コマンドラインの使用法

Python 2.7では、python -m unittest <args>を使用してunittestコマンドライン機能(テスト検出を含む)を呼び出します。unittestはパッケージであるため、python -m ...を使用してパッケージを呼び出す機能はPython 2.7の新機能です。これをunittest2に対して行うことはできません。

代わりに、unittest2にはスクリプトunit2が付属しています。コマンドラインの使用法:

unit2 discover unit2 -v test_module

また、unit2.pyと呼ばれるこのスクリプトのコピーもあり、Shebang行ではなくファイル拡張子を使用して、どのプログラムでファイルを実行するかを決定するWindowsに役立ちます。これらのスクリプトはどちらもdistutilsによってインストールされます。

Python 2.7の「メインスクリプトとしてパッケージを実行する」機能の代わりに、古いPythonの代わりとしてこのノートが推奨するunit2スクリプトを試しましたか?おそらくそのソースも役立つかもしれません自分のコードからテストを検出して実行する方法を正確に見つけるため(そうしたい場合)。

24
Alex Martelli