web-dev-qa-db-ja.com

Python unittestはテストを実行しません

デモと呼ばれる小さなプロジェクトを作成し、その中に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
7
Baron Yugovich

私はしばらく前に同じ問題と戦い、テスト検出コマンドを使用してそれを解決しました。

python -m unittest discover -s .

テストファイルパターンと他のすべてのオプションを渡すこともできます https://docs.python.org/2/library/unittest.html#test-discovery

4
k.wahome

私が知っている3つの落とし穴があります:

  1. TestCasesのテストには、test_*という名前を付ける必要があります。
  2. テストファイルには、test*.pyという名前を付ける必要があります(デフォルトでは、テストの実行時に-pフラグを使用して変更できます)。例えばtest_demo1.py
  3. 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

3
Multihunter

モジュールのリスト を渡す必要があります。

たとえば、テストファイルがfoo.pyの場合、python -m unittest fooを実行できます。

2
jh314

私(Intellijからテストを実行している)の場合、クラスの「実行構成」を削除する必要がありました。以前、ユニットテストを_pytest.unittestとして誤ってインポートし、テストクラスを実行していました。もちろん、それはうまくいきませんでした。モジュールのインポートを修正しましたが、「構成の実行」がまだ残っていたため、「Pythonテスト」ではなくPythonスクリプトとして実行されました。

0
user968711