2011-07-13 10 views
1
Rhino.Mocks.Exceptions.ExpectationViolationException was unhandled by user code 
Message=Service.GetCommunityLightPagered(null, 1, null, null, Data.PagingInfo); 
Expected #0, Actual #1. 
Service.GetCommunityLightPagered(null, 1, null, null, Data.PagingInfo); 
Expected #1, Actual #0. 
Source=Rhino.Mocks 

2クラスPagingInfoは2つのインスタンスですが、同じ値を持ち、アサートの前に確認されています。ここ 意味がないRhinoMocksの例外

は、ユニットテストコード

 //Arrange 
     GetController("user1"); 

     //Act 
     using (MockRepository.Record()) 
     { 
      Expect.Call(
       ServiceClient.GetMock<Service>().GetUserPermissionSet(
        "user1", false, false, false)).Return(
         Db.User.Permissions.Where(p => p.Name == "CreateCommunity").ToArray()); 
     } 
     using (MockRepository.Playback()) 
     { 
      ActionResult result = Controller.ExecuteAction<int?, int?, string, string, string, string, string, string>(ServiceClient, Controller.SearchCommunities, null, null,null, null, null, CommunityTypeEnum.HighSchool, null,null); 
      //Assert 
      Assert.AreEqual(typeof(PartialViewResult), result.GetType()); 
     } 
+7

コードを表示してください –

答えて

1

問題:

Expect.Call(ServiceClient.GetMock<IUserService>().GetCommunityLightPagered(null, 1, null,null, new PagingInfo 
       { 
        Page = 1, 
        Rows = 10, 
        SortColumn = "Id", 
        SortOrder = "desc" 
       }) 
       ).IgnoreArguments().Return(TestHelper.CommunityInfoLightDTO()); 

今、これに対するすべての呼び出しは、有効と見なされます。

編集1:なぜIgnoreArguments()を使用する必要がありますか?時々あなたは嘲笑される必要のある大きなオブジェクトを持っているかもしれません。多分あなたはその小さな部分をテストしたいだけです。 私は通常、パラメータとしてオブジェクトを持っているときに使用します。 これを使用しないようにする別の方法は、両方のオブジェクト(記録用に使用されるオブジェクトと再生時にparamとして使用されるオブジェクト)に同じハッシュコードを使用することです。

2

ダニエルは述べたように、いくつかのコードを共有しています。

厳密なモックを作成していて、期待していなかったモック(「実際の#1」)(「期待#0」)に何か問題が発生しています。アレンジフェーズで明示的に設定されていない厳密な模擬試験では何も起こりません。解決

+0

先ほど示した文脈で、部分模擬や動的モックをどうすればできますか? –

関連する問題