py-py’s blog

何か書くよ

Pytest の基本

ちょくちょく更新

  • pytestのテスト対象プログラム名はtest_xxxx.py
  • テスト対象となる関数やメソッドはtest_xxxで始まるもの
  • テスト対象プログラム内でclassを用いてtestclassを使う際はclass名をTestXXXXにする
  • pytest を行う際、コマンドにオプションや引数を与えることで対象ディレクトリ、対象プログラム、対象関数やクラス、メソッドなど細かく指定できる
  • pytest -v オプションを使うと詳細にログを出してくれる
  • pytest -vv オプションを使うと超詳細にログを出してくれる
  • pytest --tb=no オプションを使うとログが簡潔になる
  • テストコード内ではassertで評価を行う
  • assertはテスト対象関数、メソッドの最後で評価すべし
  • pytest.fail("message")は明示的にエラーを発生させる

想定したエラーが発生するか確認する

def test_sample():
    with pytest.raises(ExceptionName):
        '''same_code'''

上記のpytest.raises(ExceptionName)の部分で想定したエラー名を書く
same_codeで想定したエラーが発生すればよい

  • with pytest_raises(ExceptionName, match)とすると、match部分に正規表現使ってエラーメッセージとの照合を行う
  • with pytest_raises(ExceptionName) as exec_infoなどとすることでExceptionInfo型としてあつかえる
  • テストを行う前に、対象のsetup, teardownようにフィクスチャを使う
  • フィクスチャ関数には@pytest.fixture()をつける
  • フィクスチャを使うテストコードは引数にフィクスチャ関数名を入れる
import pytest

@pytest.fixture()
def sample():
    print('set up')
    yield something
    print('tear down')

def test_code(sample):
    print('test code')

上記のようにすると、test_code関数実行時、最初にフィクスチャ関数のsampleが動き、次にtest_codeが動き、最後にsampleのprint('tear down')が実行される