为什么我的PartialMock方法忽略了我的期望

问题描述

|| 我有一个用作PartialMock的基类
1  IContextManager contextManager = mocks.StrictMock<IContextManager>();
2  target = mocks.PartialMock<EnumerationServiceBase>(new object[] { contextManager });
3  Expect.Call(delegate { contextManager.RemoveContext(guid); });
4  mocks.ReplayAll();
5  actual = target.ReleaSEOp(request);
target.ReleaSEOp(request)调用了contextManager.RemoveContext方法,该方法已在第3行设置了期望值,但仍然出现以下错误 Rhino.Mocks.Exceptions.ExpectationViolationException:IContextManager.RemoveContext(\“ e04c757b-8b70-4294-b133-94fd6b52ba04 \”);预期#0,实际#1。 这是第一个没有用到的测试(其他45个左右都可以),但这也是第一个使用A)部分模拟和B)返回void的模拟方法的测试。有任何想法吗?     

解决方法

  这是第一个测试   没用(其他45个左右   很好),但这也是第一个   使用A)部分模拟,和B)a   返回void的模拟方法。任何   想法? A)PartialMock意味着Rhino仅在有期望的情况下才会拦截方法调用。我认为您的用法很好。 B)无效方法也不应该成为问题。 最有可能的是,您的问题出在您的期望中:
Expect.Call(delegate { contextManager.RemoveContext(guid); });
您所期望的
guid
必须与
target
传入的GUI相同。 尝试这个:
Expect.Call(delegate { contextManager.RemoveContext(guid); }).IgnoreArguments();

// you can also use fluent syntax like this:
// contextManager.Expect(x => x.RemoveContext(guid)).IgnoreArguments();
如果可行,您可以肯定地确定您的测试指南和您的课程中使用的实际指南不匹配。