2011-07-12 8 views
0

私はテストしているクラスで2つのリポジトリメソッド呼び出しを模擬(スタブ?)する必要のあるユニットテストメソッドを持っています。今まで私が試したすべての例では、Mockの設定方法が1つ示されていますが、今は2つ必要です。Moqの設定を1つの方法で2回呼び出す方法はありますか?

例:この例では

_employeeRepositoryMock.Setup(e => e.GetEmployees()) 
      .Returns(new Employee[] 
        { 
         new Employee 
         { 
          Name = "John Doe" 
         } 
        }); 
_employeeRepositoryMock.Setup(e => e.UpdateEmployee(1)).Returns(true); 

Assert.IsTrue(_employeeService.UpdateEmployeeRecords() > 0); 
_employeeRepositoryMock.Verify(gr => gr.UpdateEmployee(1), Times.Exactly(1)); 

私は両方の「UpdateEmployeeRecords()」で呼ばれる2つのリポジトリ方法を模擬する必要があるが、私はどのようにわかりません。

更新

スクラッチこの全体の問題 - 私はシンプルなものを見落とし。 UpdateEmployeeの数値が間違っていたため、Assertが失敗しました。私はそれを渡す代わりに、模擬のパラメータをIt.IsAnyに変更しました。

答えて

0

この方法では、メソッドが返すデータ型(私の場合はList<int>List<string>)を作成し、.Returnsを使用してそれを返します。今DoSomethingElseThatIsReallyCool()メソッドが呼び出されたときにDoSomething()メソッドは、それが嘲笑データとstringResultリストとして私intResultリストを返しますと呼ばれるたびに:

//Test method 
{ 
    List<int> intResult = new List<int>(); 
    intResult.Add(0); 

    List<string> stringResult = new List<string>(); 
    stringResult.Add("test"); 

    _reposMock.Setup(r=>r.DoSomething()).Returns(intResult); 
    _reposMock.Setup(r=>r.DoSomethingElseThatIsReallyCool()).Returns(stringResult); 

    Assert.IsTrue(_reposMock.SomeMethod() > 0); 
} 
+0

申し訳ありませんが、私の例を非常に一般的なものにすることで、あなたの答えは翻訳で失われました。上記の私の編集をご覧ください。私のアサートが失敗し、2回目のセットアップコールが原因であると思われます。 – Mike

0

あなたのセットアップ方法は、罰金のように見えます。あなたのアサーションは何らかの理由で失敗しているに違いありません。いくつかの考え:

  1. あなたはテストのデバッグを試してみましたか?
  2. UpdateEmployeeメソッドでは、正しい値が1になっていますか?
  3. (私がこれを愛用していれば私を容赦しますが、これまでにやったことがあります)あなたは_employeeRepositoryMock.Object経由でサービスにあなたのモックを渡していますか?
関連する問題