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个实例,但具有相同的值,并且在使用断言之前已经过验证。
这是单元测试代码
//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());
}
答案 0 :(得分:2)
正如丹尼尔所说,分享一些代码。
我最好的猜测:您已经创建了一个严格的模拟,并且您的测试导致模拟(“实际#1”)上发生了一些不期望的事情(“预期#0”)。在编配阶段未明确配置的严格模拟上不会发生任何事情。
答案 1 :(得分: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()?因为有时你需要嘲笑大对象,也许你只想测试它的一小部分。 当我有对象作为参数时,我通常使用它。 另一种避免使用它的方法是对两个对象使用相同的哈希码,一个用于记录,一个用作回放中的参数。