pytest

pytestを4系にアップデートしたら、pytest-freezegun 0.2.0 でエラーが出た

Pythonで日付まわりをテストする場合、日付を固定できる freezegun が便利です。 spulec/freezegun: Let your Python tests travel through time また、pytestの場合、pytestのプラグインとして pytest-freezegun があります。 ktosiek/pytest-freezegun: Ea…

pytestのkオプションは、マーカー名でマッチしているものもテスト対象だった

pytestでテストを実行する時、今までは -m オプションは、マーカー(@pytest.marker.xxx)に一致するもの -k オプションは、テストクラス名やテストメソッド名でマッチするもの を対象のテストコードとして実行するものと考えていました。 ただ、最近 -k オプ…

Python + pytestにて、pytestに独自のコマンドラインオプションを追加する

Python + pytestにて、コマンドラインオプションを追加して、コマンドラインから値を受け取った時のメモを残します。 目次 環境 pytestのコマンドラインオプションの追加方法 conftest.pyの実装 テストコードの実装 テストの実行 応用:コマンドラインオプシ…

Python + pytestにて、pytest.raisesを使って例外をアサーションする時の注意点

Python + pytestにて、「pytest.raisesを使って例外をアサーションする」テストコードを作成する機会がありました。 ただ、書き方を誤りうまくアサーションできなかっため、メモを残します。 目次 環境 状況 原因 対応 ソースコード 環境 Python 3.6.0 unitt…

Python + pytestで、monkeypatch.setattr()を使ってみた

pytestでは、monkeypatchを使ってmockを作成できます。 Monkeypatching/mocking modules and environments — pytest documentation モンキーパッチ/モックのモジュールと環境 今回は、monkeypatch.setattr()を使って、 プロダクションコードのメソッドや関…

Python + pytestで、プレフィクスがアンダースコア2つの関数(プライベート関数)をテストする

pytestにて、プライベート関数のテストで悩んだことがあったため、メモを残します。 なお、今回のテスト対象コードは以下とします。 target.py def __double_underscore_function(): return 'double' 目次 環境 プライベート関数のimportについて 通常のコー…

Pythonのテストコードで、モジュールをモックに差し替える

Pythonにて、開発環境に無いモジュールをimportしているプロダクションコードに対して、テストコードを書く機会がありました。 ただ、テストコードにてモジュールをモックに差し替える方法で悩んだため、メモを残します。 目次 環境 対応 ソースコード 環境 …

Django + pytestで、setupやteardown、fixtureのscopeなどの実行タイミングを調べてみた

Django + pytestでテストの初期化や後始末を書く場合、 django.test.TestCaseを使った、setUp()やtearDown() pytestを使った、classic xUnitスタイルのsetup_xxx()やteardown_xxx() pytestを使った、@fixtureのscope などのテストフィクスチャが使えます。 …

Django + factory_boyで、1対多や多対多のリレーションを持つテストデータを作る

DjangoでModelまわりのテストデータを用意するには何を使うのが良いのかを調べてみたところ、factory_boyを使うのが良さそうでした。Djangoの他、Mogo・MongoEngine・SQLAlchemyなどのORMにも対応しているのも良いです。 rbarrois/factory_boy: A test fixtu…

Djangoアプリについて、pytest-djangoを使ってテストしてみた

Djangoのテストについて考えていたところ、以下の記事に出会いました。 Djangoのテストの書き方について勉強したのでまとめる - c-bata web Django Best Practice への道 #2 後者の記事にもある通り、pytestではテストの失敗内容を細かく出せそうでした。 そ…