2011-09-15 15 views
1

私はユニットテストをしたいサービスクラスを持っています。このサービスは、いくつかのデータを保存するためにリポジトリクラスメソッドを呼び出します。しかし、私がsaveメソッドを呼び出す前に、私は、テスト中のサービスクラスに属するバリデーションメソッドを持っています。このメソッドは、リポジトリ保存メソッドのパラメータとして永続化されるクラスの特性を検証します。テスト中のクラスのメソッドをMOQでモックする方法

リポジトリ保存メソッドが呼び出されたことを確認するには、リポジトリクラスを偽装して保存メソッドを設定する必要がありますが、テスト対象のサービスクラスに属する検証メソッドが呼び出された同じクラスに属しているため、テスト対象のメソッドをユニット単位でテストしていますか?

答えて

0

Verifyメソッドでエラーを報告する無効なデータを渡して間接的にテストします。

例:

  • Verifyは、無効な値上の例外がスローされます。この例外は
  • Verify戻りfalseを投げられたし、テスト対象のメソッドは、このためSaveを呼び出すことはありませんので、あなたのユニットテストのチェックを行います:Saveへの呼び出しが発生していないことをリポジトリモックにアサートします。
+0

ですから、バリデーションメソッドがユニットテストで無効なデータを渡すことによって例外をスローするようにする必要があります。意味があります、私は例外データが無効なデータを渡すときに例外がスローされることをテストするための単体テストテストメソッドを書くだけです。ありがとう – Tunji

0

サービスクラスを他のクラスに追加するまではできません。ここであなたがする必要があるものです。

  1. パブリックコンストラクタまたはパブリックプロパティを使用してサービスクラスのインスタンスを取得するクラスを作成します。
  2. エンティティを保存して変数に保持するために、サービスクラスが依存するリポジトリのタイプをモックします。
  3. モックされたレポのSaveメソッドに期待値を設定します。
  4. サービスクラスをモックしますが、モックされたサービスクラスに(モックされた)レポをプロパティまたはコンストラクタを介して注入します。
  5. モックされたサービスクラスのValidateメソッドに期待値を設定します。
  6. 手順1で作成したクラスのmockedサービスクラスを注入してください。期待したことが満たされなかった場合、テストは失敗します。
関連する問題