🗂

pytestでテストをグループ化する

2022/10/20に公開

問題

対応

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に割ろうという主張もある。
https://kentcdodds.com/blog/avoid-nesting-when-youre-testing
賛同できる。
pytestでも同様の話になるだろう。
テストが大きくなったら割ったほうがいい。
その予防のためにグループ化の手段を使わないというのは1つの選択。
もしかしたら、グループ化したくなったということはオブジェクトの責務が大きすぎるというシグナルかもしれないが、良い例を持ち合わせていない。

Discussion