🗂
pytestでテストをグループ化する
問題
- pytestを使ってテストしている
- ある条件の場合のテストスイートをまとめたい
- jestでいうところの
describe
のようなことをしたい
- jestでいうところの
対応
classでグループ化する。
ドキュメントは https://docs.pytest.org/en/7.1.x/getting-started.html#group-multiple-tests-in-a-class
class Test_指標が閾値Aを超えた場合:
def test_在庫を追加する(self):
assert 1 == 1 # 適当
class Test_指標が閾値Bを下回った場合:
def test_在庫を解消する(self):
assert 2 == 2 # 適当
def test_注文をキャンセルする(self):
assert 1 == 2 # 適当
出力は下記。
============================= test session starts =============================
collecting ... collected 3 items
test_interactor.py::Test_指標が閾値Aを超えた場合::test_在庫を追加する
test_interactor.py::Test_指標が閾値Bを下回った場合::test_在庫を解消する PASSED [ 33%]
test_interactor.py::Test_指標が閾値Bを下回った場合::test_注文をキャンセルする PASSED [ 66%]FAILED [100%]
test_interactor.py:26 (Test_指標が閾値Bを下回った場合.test_注文をキャンセルする)
1 != 2
余談
jestのdescribeを使うとファイルが大きくなって認知負荷が上がるので、describeを使うのを避けてfileに割ろうという主張もある。
pytestでも同様の話になるだろう。
テストが大きくなったら割ったほうがいい。
その予防のためにグループ化の手段を使わないというのは1つの選択。
もしかしたら、グループ化したくなったということはオブジェクトの責務が大きすぎるというシグナルかもしれないが、良い例を持ち合わせていない。
Discussion