334

私たちのチームでは、ほとんどのテスト ケースを次のように定義しています。

1 つの「フレームワーク」クラスourtcfw.py:

import unittest

class OurTcFw(unittest.TestCase):
    def setUp:
        # Something

    # Other stuff that we want to use everywhere

そして、testMyCase.py のような多くのテスト ケース:

import localweather

class MyCase(OurTcFw):

    def testItIsSunny(self):
        self.assertTrue(localweather.sunny)

    def testItIsHot(self):
        self.assertTrue(localweather.temperature > 20)

if __name__ == "__main__":
    unittest.main()

新しいテスト コードを書いていて、それを頻繁に実行して時間を節約したい場合は、他のすべてのテストの前に "__" を付けます。しかし、それは面倒で、書いているコードから気をそらしてしまいます。また、これが作成するコミット ノイズは単純にうっとうしいものです。

したがって、たとえば、に変更を加えるときは、次のtestItIsHot()ことができるようにしたいと考えています。

$ python testMyCase.py testItIsHot

unittest実行しただけ testItIsHot()

どうすればそれを達成できますか?

その部分を書き直そうとしましたif __name__ == "__main__":が、私はPythonに慣れていないので、道に迷い、メソッド以外のすべてにバッシングし続けています。

4

9 に答える 9

402

これはあなたが提案したとおりに機能します-クラス名も指定するだけです:

python testMyCase.py MyCase.testItIsHot
于 2013-04-12T12:44:32.007 に答える
186

テスト ケースを編成する場合、つまり、実際のコードと同じ編成に従い、同じパッケージ内のモジュールに対して相対インポートを使用する場合は、次のコマンド形式も使用できます。

python -m unittest mypkg.tests.test_module.TestClass.test_method

# In your case, this would be:
python -m unittest testMyCase.MyCase.testItIsHot

これに関する Python 3 ドキュメント: Command-Line Interface

于 2014-10-23T15:34:14.660 に答える
86

あなたが推測するようにそれはうまくいくことができます

python testMyCase.py MyCase.testItIsHot

そして、単にテストする別の方法がありますtestItIsHot:

    suite = unittest.TestSuite()
    suite.addTest(MyCase("testItIsHot"))
    runner = unittest.TextTestRunner()
    runner.run(suite)
于 2013-04-12T12:53:32.630 に答える
16

TL;DR : これはうまくいく可能性が非常に高いです:

python mypkg/tests/test_module.py MyCase.testItIsHot

説明

  • 便利な方法

      python mypkg/tests/test_module.py MyCase.testItIsHot
    

    動作しますが、その暗黙の前提は、この従来のコード スニペットが既にテスト ファイル内 (通常は末尾) にあるということです。

    if __name__ == "__main__":
        unittest.main()
    
  • 不便な方法

      python -m unittest mypkg.tests.test_module.TestClass.test_method
    

    if __name__ == "__main__": unittest.main()テストソースファイルにそのコードスニペットを含める必要なく、常に機能します。

では、なぜ 2 番目の方法が不便だと考えられるのでしょうか。<insert one of your body parts here> でドット区切りの長いパスを手で入力するのは面倒だからです。最初の方法ではmypkg/tests/test_module.py、最新のシェルまたはエディターのいずれかによって、パーツをオートコンプリートできます。

于 2019-11-14T19:12:50.110 に答える
3

スクリプトから (たとえば、jupyter ノートブックから) テストを直接実行する場合は、これを実行して 1 つのテストのみを実行できます。

from testMyCase import MyCase
unittest.main(argv=['ignored', '-v', 'MyCase.testItIsHot'], exit=False)
于 2021-08-04T14:39:04.660 に答える