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

时间:2011-04-15 18:53:58

标签: unit-testing rhino-mocks rhino partial-mocks

我有一个基类,我正在使用它作为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的模拟方法。有什么想法吗?

1 个答案:

答案 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();

如果有效,你可以相当确定你班上使用的测试指导和实际指导不匹配。

相关问题