我有一个基类,我将其用作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 - 8 b70 - 4294 b133 - 94 fd6b52ba04");期望#0,实际#1。
这是第一个没有工作的测试(其他45个左右都很好),但这也是第一个使用A)部分模拟和B)返回void的模拟方法的测试。什么好主意吗?
这是第一个测试没有成功(其他45个左右是)好吧),但这也是第一次A)部分模拟,B) A模拟返回void的方法。任何想法吗?
A) PartialMock意味着Rhino只会在上有期望时拦截方法调用。我认为你在这里的用法很好。
B) Void方法也不应该是一个问题。很可能,你的问题在你的期望中:
Expect.Call(delegate { contextManager.RemoveContext(guid); });
您期望的guid
需要与target
传入的向导是相同的实例。
试试这个:
Expect.Call(delegate { contextManager.RemoveContext(guid); }).IgnoreArguments();
// you can also use fluent syntax like this:
// contextManager.Expect(x => x.RemoveContext(guid)).IgnoreArguments();
如果它工作,你可以相当肯定你的测试指南和你的类中使用的实际指南不匹配。