unittest
Pythonでモジュールを使用するときに、個々の単体テストを一時的に無効にするにはどうすればよいですか?
7 に答える
個々のテストメソッドまたはクラスは、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.__name__ + ' has been disabled'
return _decorator
@disabled
def testFoo():
'''Foo test case'''
print 'this is foo test case'
testFoo()
出力:
testFoo has been disabled
@unittest.SkipTest
テストの上にデコレータを配置するだけで十分です。
最新バージョン(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_"))))
テストケースメソッドの名前をアンダースコアに変更します。test_myfuncは_test_myfuncになります。
2.1のドキュメントでは、ignoreまたはskipメソッドを指定していません。
ただし、通常は必要に応じてコメントをブロックします。
質問の「一時的に無効にされた」部分に焦点を当てると、最良の答えはユースケースによって多少異なります。私をここに連れてきたユースケースは、関数のテスト駆動開発を行っていることです。このプロセスでは、テストを連続して記述し、デバッグ用の関数でブレークポイントを使用することがよくあります。テストランナーを実行するたびにすべてのテストを実行すると、すでに機能しているテストのブレークポイントで停止することになります。関数の記述が終わったら、すべてのテストを実行したいので、「スキップ」を追加したり、テスト名などを変更したりすることは、私が望んでいることではありません。「スキップ」を使用した場合は、戻って「スキップ解除」する必要があります。
私のユースケースでは、解決策はテストコードではなく、テストランナーにあります。pytestを使用しています。pytestを使用すると、コマンドラインから単一のテストを簡単に指定できます。
pytest PYTHON_FILENAME.TEST_CLASS.TEST_NAME
(キャップを自分の値に置き換えます)。
その質問はpython-unitestに対するものだったと理解しています。私は長い間それを使用していません。pytestに似たものがあったとしても驚かないでしょう。そうでない場合は、簡単にpytestに切り替えることができます。コードを変更する必要はありません。インストールして、テストランナーコマンドを変更するだけです。
また、PyCharmProを使用しています。私のテストコードを表示するページでは、各テストのdefの横に小さなアイコンがあります。そのアイコンをクリックして、そのテストを個別に実行できます。