Pythonの今どきのunittestってどうなってる?
sta.icon
unittestマン
pytestは何が強いん?
マジックメソッドでパラメタライズテストやモックができること?
assertを自然に使える
test_function()とかTestClassといったネーミングにしておくと自動でそいつらが対象になる
code:例外.py
def test_mytest():
with pytest.raises(SystemExit):
f()
pytest.mark.xfail を strict=False で使用すると、テストが失敗してもビルド全体が壊れないように印をつけることができます。
あとはプラグインがなんか色々サポートしてるみたいなこと書いてるかsta.icon
テスト対象の見つけ方
test_*.pyと*.test_py
test*な関数やメソッド
Test*なクラスの中のtest*な関数やメソッド
UnitTestのディスカバリーアルゴリズムもサポート
fixtureとは「一貫性があって信頼できるコンテキスト」
AAACでいうarrangeの部分で、必要なデータを定義する
特定の関数がフィクスチャであることを pytest に伝えるには、@pytest.fixture で装飾してください。pytest のフィクスチャがどのようなものか、簡単な例を示します。
code:py
import pytest
class Fruit:
def __init__(self, name):
self.name = name
def __eq__(self, other):
return self.name == other.name
@pytest.fixture
def my_fruit():
return Fruit("apple")
@pytest.fixture
def fruit_basket(my_fruit):
def test_my_fruit_in_basket(my_fruit, fruit_basket):
assert my_fruit in fruit_basket
で、何が嬉しいん?sta.icon*2
pytest フィクスチャは、古典的な xUnit のスタイルである setup/teardown 関数に対して劇的な改善を提供します。
なるほどな、テストデータを「フィクスチャ」という概念でパーツ化するわけねsta.icon
かつ、内部的に冪等性っぽいことをよしなにしてくれているので使いやすい
手作業で慎重にエラーを処理したり、クリーンアップステップを追加する順番を細かく管理したりする必要がなく、フィクスチャがいくつ使われていても、ティアダウンロジックを簡単かつ安全に管理することができます。
例外で死んだらそいつをdirty扱いにして実行させない
もし以前のフィクスチャに問題があり、例外を発生させた場合、 pytest はそのテストのフィクスチャの実行を停止し、テストにエラーがあるものとしてマークします。
ああ、エラー起きたらとにかく全部巻き込むという単調なのからあらがってるわけかかsta.icon
フレイキーの発見もしやすくなりそう