3

古い Rhino Mocks レコード再生構文を使用すると、MockRepository インスタンスが作成され、そこからすべてのモックが作成されます。単体テストの最後に、メソッド [MockRepository Instance].VerifyAll() が呼び出され、すべてのモックが検証されます。

現在の AAA 構文では、すべてのモックが MockRepository クラスの静的メソッドによって作成されます。現時点では、テストの最後または破棄時に各モック オブジェクトを検証するよりも良い解決策は見つかりませんでした。新しいモックインスタンスの検証を忘れることがあるため、これは古い構文の動作よりもエラーが発生しやすくなります。

皆さんはこれをどのように処理していますか?既存のすべてのモックを検証するより良い方法はありますか?

4

1 に答える 1

4

(...) 既存のすべてのモックを検証するより良い方法はありますか?

より良い方法は、一度に 1 つのことをテストすることです。おそらく、すべてを検証することから明示的な検証へと移行した Rhino の動きは、一度に 1 つのことをテストすることを促進するために、そのような方法で行われたのでしょう (その結果、必要な検証は 1 つだけで十分です)。

複数のモックを検証する必要があるのは、(単一のテストのように) 一度に複数の動作をチェックしたいという事実から来ることは容易に理解できます。これは、数段階前に最適化されていない設計を選択した結果である可能性があり、(テストを書くのが難しい) ことを警告サインと見なす可能性があることに注意してください。

ayendeの Rhino Mocks 3.5 ガイド ページには、1 つのテストで 2 つ以上のモックが使用されている例は 1 つもありません。

モックと複数のスタブの問題について

コードを検証するためではなく、環境/要件をセットアップするためにスタブを使用します。スタブを検証することはありません (メソッドが呼び出されたかどうか、またはプロパティに特定の値があるかどうかなど)。スタブは基本的に、テストするコードによって使用される読み取り専用のコンポーネントです。この区別の結果として、スタブがテストを失敗させることは決してありませんが、モックは確実に失敗する可能性があります。これが、Rhino の例で複数のスタブが表示されるのに、常に 1 つのモックが表示される理由です。

于 2012-11-16T07:38:46.063 に答える