我有一个基类,我正在使用它作为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的模拟方法。有什么想法吗?
答案 0 :(得分:1)
这是第一次测试 没有工作(其他45个左右 很好),但这也是第一个 使用A)部分模拟,和B)a 返回void的模拟方法。任何 想法?
A)PartialMock意味着如果对它有期望,Rhino将拦截方法调用 。我认为你的用法很好。
B)无效方法也不应成为问题。
最有可能的是,您的问题符合您的期望:
Expect.Call(delegate { contextManager.RemoveContext(guid); });
您期望的guid
需要与target
传入的guid相同。
试试这个:
Expect.Call(delegate { contextManager.RemoveContext(guid); }).IgnoreArguments();
// you can also use fluent syntax like this:
// contextManager.Expect(x => x.RemoveContext(guid)).IgnoreArguments();
如果有效,你可以相当确定你班上使用的测试指导和实际指导不匹配。