シングルアサーションテストはDRYに違反していますか?
いいえ、しかし違反を助長します。
とは言っても、優れたオブジェクト指向設計は、ユニットテストの範囲外になる傾向があります-主に正当な理由があります。単体テストを互いに分離して、他のテストを中断しないという自信を持って修正できるように、テストを分離して調査できるようにすることがより重要です。基本的に、テストの正確さと読みやすさは、サイズや保守性よりも重要です。
率直に言って、私はあなたが説明する理由のためにテストルールごとに主張するもののファンではありませんでした:それは読みにくく、間違ったボイラープレートを作りやすく、リファクタリングするとうまく修正するのが難しい多くの定型コードにつながります(これにより、リファクタリングが少なくなります)。
関数が与えられた入力に対して "foo"と "bar"のリストを返すことになっているが、任意の順序で2つのアサートを使用して、両方が結果セットにあることを確認するのは問題ありません。問題が発生するのは、1つのテストで2つの入力または2つの副作用をチェックしているときに、どちらが失敗の原因かわからない場合です。
私はそれを単一責任原則のバリエーションと見なします。テストが失敗する原因は1つだけであり、理想的な世界では、変更は1つのテストのみを中断する必要があります。
しかし、最終的にはトレードオフです。コピーしたすべてのコードを維持するのにより多くの時間を費やす可能性が高いのでしょうか、それとも複数のソースによってテストが破られる可能性のある根本的な原因を探すのにより多くの時間を費やしますか?-some-テストを書く限り、おそらく大した問題ではないでしょう。シングルアサートテストに対する軽disにもかかわらず、私はより多くのテストの側で間違いを犯す傾向があります。あなたのマイレージは異なる場合があります。