Unittest-framework-py-test-module

提供:Dev Guides
移動先:案内検索

UnitTest Framework-Py.testモジュール

2004年にHolger Krekelが std パッケージの名前を変更しました。このパッケージの名前は、Pythonに同梱されている標準ライブラリの名前とよく混同されますが、(少しだけ混同が少ない)名前を「py」に変更しました。パッケージにはいくつかのサブパッケージが含まれていますが、現在はほぼ完全にpy.testフレームワークで知られています。

py.testフレームワークはPythonテストの新しい標準を設定し、今日多くの開発者に非常に人気があります。 テスト作成のために導入されたエレガントでPythonicのイディオムにより、テストスイートをはるかにコンパクトなスタイルで作成できるようになりました。

py.testは、Pythonの標準のunittestモジュールの定型的な代替手段です。 完全に機能する拡張可能なテストツールであるにもかかわらず、シンプルな構文を誇っています。 テストスイートの作成は、いくつかの機能を持つモジュールを作成するのと同じくらい簡単です。

py.testは、すべてのPOSIXオペレーティングシステムおよびPythonバージョン2.6以降を搭載したWINDOWS(XP/7/8)で実行されます。

インストール

次のコードを使用して、py.test.exeユーティリティと同様に、現在のPythonディストリビューションにpytestモジュールをロードします。 テストは両方を使用して実行できます。

pip install pytest

使用法

assertステートメントを使用して、テストの期待値をアサートできます。 pytestのassertイントロスペクションは、assert式の中間値をインテリジェントに報告するため、* JUnitレガシーメソッド*の多くの名前を学ぶ必要がなくなります。

# content of test_sample.py
def func(x):
   return x + 1

def test_answer():
   assert func(3) == 5

上記のテストを実行するには、次のコマンドラインを使用します。 テストが実行されると、次の結果がコンソールに表示されます-

C:\Python27>scripts\py.test -v test_sample.py
============================= test session starts =====================
platform win32 -- Python 2.7.9, pytest-2.9.1, py-1.4.31, pluggy-0.3.1 -- C:\Pyth
on27\python.exe
cachedir: .cache
rootdir: C:\Python27, inifile:
collected 1 items
test_sample.py::test_answer FAILED
================================== FAILURES =====================
_________________________________ test_answer _________________________________
   def test_answer():
>  assert func(3) == 5
E     assert 4 == 5
E     + where 4 = func(3)
test_sample.py:7: AssertionError
========================== 1 failed in 0.05 seconds ====================

テストは、-mスイッチを使用してpytestモジュールを含めることにより、コマンドラインから実行することもできます。

python -m pytest test_sample.py

クラス内の複数のテストのグループ化

一度に数個以上のテストを開始したら、クラスとモジュールでテストを論理的にグループ化することが理にかなっています。 2つのテストを含むクラスを書きましょう-

class TestClass:
   def test_one(self):
      x = "this"
      assert 'h' in x
   def test_two(self):
      x = "hello"
      assert hasattr(x, 'check')

次のテスト結果が表示されます-

C:\Python27>scripts\py.test -v test_class.py
============================= test session starts =====================
platform win32 -- Python 2.7.9, pytest-2.9.1, py-1.4.31, pluggy-0.3.1 -- C:\Pyt
on27\python.exe
cachedir: .cache
rootdir: C:\Python27, inifile:
collected 2 items
test_class.py::TestClass::test_one PASSED
test_class.py::TestClass::test_two FAILED
================================== FAILURES =====================
_____________________________ TestClass.test_two ______________________________
self = <test_class.TestClass instance at 0x01309DA0>

   def test_two(self):
      x = "hello"
>  assert hasattr(x, 'check')
E     assert hasattr('hello', 'check')

test_class.py:7: AssertionError
===================== 1 failed, 1 passed in 0.06 seconds ======================