单元测试——为什么我的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 - 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();

如果它工作,你可以相当肯定你的测试指南和你的类中使用的实际指南不匹配。

相关内容

  • 没有找到相关文章

最新更新