1. ホーム
  2. python

[解決済み] Python unittest.TestCaseの実行順序について

2023-04-06 14:11:49

質問

Pythonで unittest を使用してテストケースの実行順序を設定する方法はありますか?

私の現在の TestCase クラスでは、いくつかのテストケースは他のテストケースが適切に実行されるための条件を設定する副作用を持っています。今、私はこれを行うための適切な方法は setUp() を使用してセットアップに関連するすべてのことを行うことですが、私は連続した各テストが次のテストが使用できるようにわずかに多くの状態を構築する設計を実装したいと思います。私はこれがはるかにエレガントだと思います。

class MyTest(TestCase):

  def test_setup(self):
    # Do something

  def test_thing(self):
    # Do something that depends on test_setup()

理想的には、テストはクラスで表示される順番に実行されるようにしたいのですが。アルファベット順で実行されるようです。

どのように解決するのですか?

独立したテストにしない - モノリシックなテストが必要ならモノリシックなテストを書け。

class Monolithic(TestCase):
  def step1(self):
      ...

  def step2(self):
      ...

  def _steps(self):
    for name in dir(self): # dir() result is implicitly sorted
      if name.startswith("step"):
        yield name, getattr(self, name) 

  def test_steps(self):
    for name, step in self._steps():
      try:
        step()
      except Exception as e:
        self.fail("{} failed ({}: {})".format(step, type(e), e))

テストが失敗し始め、最初の失敗したステップでテストケースを停止させるのではなく、すべての失敗したステップに関する情報が必要な場合、テストケース内で subtests 機能を使います。 https://docs.python.org/3/library/unittest.html#distinguishing-test-iterations-using-subtests

(サブテスト機能は unittest2 で利用可能です。 https://pypi.python.org/pypi/unittest2 )