4

これはおそらく本当につまらない質問ですが、私が尋ねる必要がある質問です。なぜわざわざリポジトリをモックするのですか?

ハードコードされた値を使用してオブジェクトを作成し、Moqを使用してそれらをインターフェイスのメソッド呼び出しから値として返す場合(つまり、実装なし)、正確に何をテストしていますか?

4

3 に答える 3

3

他の回答が言っているように、これはリポジトリ(またはデータベース、外部サービスなど)ではなく、クライアントをテストするために行いますが、これを行う主な理由は2つあります。

  1. 再現性を確保し、例外的なケースを作成するには:テストしているものが時間の経過とともに後退しないことを知りたいと考えています。リポジトリが変更されている場合、現在機能しているものが以前にも機能したかどうかを確認することはできません。さらに、現在リポジトリに表示されない可能性のある例外的なケース(おそらく、社会保障番号を持たないユーザー、または同様にわかりにくいが可能性のあるもの)を特定してテストに含めることで、将来の互換性を確保できます。

  2. 依存関係を削除するには:テストをできるだけ簡単かつ迅速に行う必要があります。テストが依存するすべての外部リソースは、定期的なテストに対するもう1つの障壁です。リポジトリをモックすると、リポジトリが存在しない場合や見つからない場合でも、クライアントに対してテストを実行できます。

    たとえば、プログラムが「実際の」データベースに接続する場合、テストスイートはローカル(またはメモリ内)のSQLiteデータベースを使用してDBの動作をテストするため、テストを実行する人は構成や実際のデータベースに接続します。発生した変更やエラーは、共有データベースリソースに影響を与えません。

于 2012-07-25T15:41:32.047 に答える
1

そのリポジトリを使用するクライアントをテストすることになります。

IEは、リポジトリを使用して、既知のオブジェクトのセットで正しいことを行うサービスです。

于 2012-07-25T14:40:43.550 に答える
1

この場合、または一般的にモックを作成するときは、リポジトリをテストしませんが、メソッドを呼び出すなどして、特定のクラスであるSUT(テスト対象システム)がリポジトリを正しく使用することをテストします(おそらく正しい順序で)。

モックは、状態の検証ではなく、動作の検証を使用します。

つまり、モックを使用してSUTが正しく動作しているかどうかをテストしますが、テストケースの最後で正しい状態になっているわけではありません。

Jeremy Millerには、このトピックに関するすばらしい ブログ投稿がいくつかあります。

于 2012-07-25T14:41:11.180 に答える