Pythonでunittest
モジュールを使用する場合、個々の単体テストを一時的に無効にするにはどうすればよいですか?
個々のテストメソッドまたはクラスは、両方とも unittest.skip
デコレータ。
@unittest.skip("reason for skipping")
def test_foo():
print('This is foo test case.')
@unittest.skip # no reason needed
def test_bar():
print('This is bar test case.')
他のオプションについては、 スキップテストと予期される失敗 のドキュメントを参照してください。
デコレータを使用して、関数をラップするテストを無効にし、googletestまたはpython単体テストがテストケースを実行するのを防ぐことができます。
def disabled(f):
def _decorator():
print f.__+ ' has been disabled'
return _decorator
@disabled
def testFoo():
'''Foo test case'''
print 'this is foo test case'
testFoo()
出力:
testFoo has been disabled
最新バージョン(2.7-未リリース)は、テストのスキップ/無効化をサポートしています 。このモジュールを入手して、既存のPythonインストールで使用できます。おそらく動作します。
これまでは、スキップしたいテストの名前をxtest_testname
からtest_testname
に変更していました。
これを行う簡単なelispスクリプトを次に示します。私のelispは少し錆びているので、問題がある場合は事前に謝罪します。未テスト。
(defun disable_enable_test ()
(interactive "")
(save-excursion
(beginning-of-line)
(search-forward "def")
(forward-char)
(if (looking-at "disable_")
(zap-to-char 1 ?_)
(insert "disable_"))))
単に@unittest.SkipTest
テストの上のデコレーターで十分です。
テストケースメソッドの名前をアンダースコアに変更するだけです。test_myfuncは_test_myfuncになります。
2.1の docs は、ignoreまたはskipメソッドを指定しません。
通常は、必要なときにコメントをブロックします。
質問の「一時的に無効になっている」部分に焦点を当てると、最良の答えはユースケースによって多少異なります。ここに私を連れてきたユースケースは、関数のテスト駆動開発を行っていることです。このプロセスでは、テストを連続して作成し、デバッグ用の関数でブレークポイントを使用することがよくあります。テストランナーを実行するたびにすべてのテストを実行すると、既に動作しているテストのブレークポイントで停止します。関数を書き終えたら、すべてのテストを実行したいので、「スキップ」を追加したり、テスト名などを変更したりすることは望みません。 「スキップ」を使用した場合、戻って「スキップ」する必要があります。
私のユースケースでは、ソリューションはテストコードではなくテストランナーにあります。 pytest を使用します。 pytestでは、コマンドラインから単一のテストを簡単に指定できます。
pytest PYTHON_FILENAME.TEST_CLASS.TEST_NAME
(キャップを自分の値に置き換えます)。
私はその質問がpython-unitestに対するものであることを理解しています。私はそれを長い間使用していません。 pytestに似たものがあったとしても驚かないでしょう。そうでない場合は、簡単にpytestに切り替えることができます。コードを変更する必要はありません。インストールして、テストランナーコマンドを変更するだけです。
また、私はPyCharm Proを使用しています。テストコードを表示するページで、各テストのdefの横に小さなアイコンがあります。そのアイコンをクリックして、そのテストを個別に実行できます。