例
次のような架空の API があるとします。
import foo
account_name = foo.register()
session = foo.login(account_name)
session.do_something()
重要なポイントは、するためにdo_something()
は、登録してログインする必要があるということです.
以下は、非常に単純化された最初のパスの単体テスト スイートです。
# test_foo.py
import foo
def test_registration_should_succeed():
foo.register()
def test_login_should_succeed():
account_name = foo.register()
foo.login(account_name)
def test_do_something_should_succeed():
account_name = foo.register()
session = foo.login(account_name)
session.do_something()
問題
登録が失敗すると、すべてのテストが失敗し、実際の問題がどこにあるかがわかりにくくなります。すべてが壊れているように見えますが、実際に壊れているのは、重要な 1 つだけです。すべてのテストに精通していない限り、かつては重要だったものを見つけるのは困難です。
質問
依存するコア機能が失敗したときに後続のテストが実行されないように、単体テストをどのように構成しますか?
アイデア
ここに私が考えた可能な解決策があります。
- 各テストで失敗を手動で検出し、SkipTest を発生させます。- 動作しますが、多くの手作業でエラーが発生しやすい作業です。
- ジェネレーターを活用して、最初のテストが失敗したときに後続のテストを生成しないようにします。- これが実際に機能するかどうかはわかりません (以前に生成されたテストが失敗したことをどのように「知る」ことができるため)。
- テストをテスト クラスにグループ化します。たとえば、これらはすべて、ログインが必要な単体テストです。 - これが実際に私の問題に対処するかどうかはわかりません。同じように失敗も多いのではないですか?