matobaの備忘録

和歌山と東京を往復しつつ活動するエンジニアの記録

pytestで一時的に失敗を許可する

誰かのための備忘録です。あと、日本語の技術記事を増やそうかな、とも思っています。

pytestでテストを書きつつ、コードを修正していた際、既存のテストが失敗することはあります。

で、たくさんテストが失敗しすぎて、結果が見にくいと感じることもあります。

そういうときに、一時的にあるテストケースのテストの失敗を許容する書き方があります。

import pytest

@pytest.mark.xfail
def test_func():
    assert False

こんな感じです。 @pytest.mark.xfail を書くと、「このテストは失敗する」ということをマークすることができます。

詳細は、ドキュメントをどうぞ。

docs.pytest.org

他にも pytest.mark.skip とか pytest.mark.skipif とかもあります。

例えば、先日紹介したpytest-watchでテスト回しているときに、リファクタリングの修正を入れたらテストが大量にこけるようになったて、テスト一つ一つに対して、修正を検討しないといけないんだけど、まとめて検討しにくいときに使ってたりします。

複数の問題が絡まっているときも、問題を一つずつ解消していきたいので、原因を確かめて、原因を認識したテストケースは修正を後回しにするために、xfailをつけたりしてます。

pytestでクラスやメソッド指定でテストを実行することもできますが、できればpytest-watchである程度の範囲をまとめてテストしながら修正していきたいので、そんな進め方をしてたりします。