デモと呼ばれる小さなプロジェクトを作成し、その中に1つのテストを追加しました
import unittest
class Test(unittest.TestCase):
def testName1(self):
self.assertEqual(5+9, 14)
if __name__ == "__main__":
#import sys;sys.argv = ['', 'Test.testName']
unittest.main()
ただし、コマンドラインから
ThinkPad-T520:~/workspacep/demo$ python -m unittest
----------------------------------------------------------------------
Ran 0 tests in 0.000s
OK
なぜこれが機能しないのですか?一般に、コマンドラインからすべての単体テストを1行で実行するにはどうすればよいですか?
ディレクトリの構造は次のとおりです。
demo
tests
demo_test1.py __init__.py
私はしばらく前に同じ問題と戦い、テスト検出コマンドを使用してそれを解決しました。
python -m unittest discover -s .
テストファイルパターンと他のすべてのオプションを渡すこともできます https://docs.python.org/2/library/unittest.html#test-discovery
私が知っている3つの落とし穴があります:
test_*
という名前を付ける必要があります。test*.py
という名前を付ける必要があります(デフォルトでは、テストの実行時に-p
フラグを使用して変更できます)。例えばtest_demo1.py
tests
フォルダには__init__.py
ファイルが含まれている必要があります。そうでない場合、インポート元として有効な場所とは見なされません。したがって、#1の場合、テストの名前をtest_name_1
に変更する必要があります。そして#2には、2つのオプションがあります。
[〜#〜] a [〜#〜]-次のようにファイルを再構築します。
demo
tests
__init__.py
test_demo1.py
次に、python -m unittest
を実行すると、テストケースが見つかります。
[〜#〜] b [〜#〜]-次のように実行します:python -m unittest discover -p *test.py
モジュールのリスト を渡す必要があります。
たとえば、テストファイルがfoo.py
の場合、python -m unittest foo
を実行できます。
私(Intellijからテストを実行している)の場合、クラスの「実行構成」を削除する必要がありました。以前、ユニットテストを_pytest.unittestとして誤ってインポートし、テストクラスを実行していました。もちろん、それはうまくいきませんでした。モジュールのインポートを修正しましたが、「構成の実行」がまだ残っていたため、「Pythonテスト」ではなくPythonスクリプトとして実行されました。