0

我有一个基类,我将其用作 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) 调用了我在第 3 行设置了期望的 contextManager.RemoveContext 方法,但我仍然收到以下错误

Rhino.Mocks.Exceptions.ExpectationViolationException: IContextManager.RemoveContext("e04c757b-8b70-4294-b133-94fd6b52ba04"); 预期 #0,实际 #1。

这是第一个不起作用的测试(其他 45 个左右都可以),但这也是第一个使用 A)部分模拟和 B)返回 void 的模拟方法。有任何想法吗?

4

1 回答 1

1

这是第一个不起作用的测试(其他 45 个左右都可以),但这也是第一个使用 A)部分模拟和 B)返回 void 的模拟方法。有任何想法吗?

A) PartialMock 意味着 Rhino只有在它有期望时才会拦截方法调用。我认为您在这里的用法很好。

B) void 方法也不应该是一个问题。

很可能,您的问题在您的预期中:

Expect.Call(delegate { contextManager.RemoveContext(guid); });

您期望中的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();

如果它有效,您可以相当确定您的测试 guid 和课堂上使用的实际 guid 不匹配。

于 2011-04-15T19:31:11.690 回答