私が個人的に注文された単体テストはコードの匂いだと思う前に、この問題を抱えていました。理論的には、各テストは、その実行の外部で作成された状態に依存するべきではありません。
このように考えてみてください。依存関係をモックした通常の単体テストを作成している場合、SUT を呼び出す前に、必要なものはすべてテスト メソッドで作成されます。テスト スケールをロールアップするとき、はるかに大きな SUT を呼び出す前に、物事が正しい状態にあることを確認する必要があります。統合またはシステム テストのために、テスト パックが作成されてフィードの準備が整い、データベースがクリーンアップされて新しい入力の準備が整い、手動テスターでさえテスト対象のスクリプトが提供されます。
SpecFlow レベルでテストを検討する場合、同じことがGiven
必要When
です。
ただし、個人的には、次のような統合レベルのシナリオがいくつかあります。
Given ...
And ...
When ...
Then ...
When ...
Then ...
Given ...
When ...
Then ...
And ...
いくつかの点で、これらは順序付けられたテストと同義です。最終的にWhen
は、以前When
のすべての が正しく完了している必要があります。そのため、これは、 Each test should only fail for one reasonを含むUnit Testingのいくつかの原則を破っていますが、低レベルの単体テスト ハンドルがコードの問題の指標を提供するため、個人的にはこれで問題ありません。