C# 为什么我的RhinoMocks PartialMock方法调用没有被模拟?

C# 为什么我的RhinoMocks PartialMock方法调用没有被模拟?,c#,unit-testing,rhino-mocks,protected,partial-mocks,C#,Unit Testing,Rhino Mocks,Protected,Partial Mocks,我正在创建一个部分模拟,以测试基类的受保护助手方法。我对关于受保护的方法是否应该存在或者它是否应该是注入依赖项的争论不太感兴趣,因为我真的很想看到下面的过程起作用 EnumerationServiceBase_访问器是VSTS 2010生成的专用访问对象。除了第17行没有有效地设置拦截对CreateNewContextResponse(请求)的调用的期望之外,下面的一切都很好,这是partialTarget.EnumerateOp(请求)在回放期间调用的受保护方法。而是调用基类上的实际实现。我做

我正在创建一个部分模拟,以测试基类的受保护助手方法。我对关于受保护的方法是否应该存在或者它是否应该是注入依赖项的争论不太感兴趣,因为我真的很想看到下面的过程起作用

EnumerationServiceBase_访问器是VSTS 2010生成的专用访问对象。除了第17行没有有效地设置拦截对CreateNewContextResponse(请求)的调用的期望之外,下面的一切都很好,这是partialTarget.EnumerateOp(请求)在回放期间调用的受保护方法。而是调用基类上的实际实现。我做错了什么

1  PrivateObject p = new PrivateObject(mocks.PartialMock<EnumerationServiceBase>(contextManager, requestValidator, configProvider, faultProvider, logger));
2  EnumerationServiceBase_Accessor partialTarget = mocks.PartialMock<EnumerationServiceBase_Accessor>(p);
3
4  EnumerateOpRequest request = new EnumerateOpRequest()
5  {
6   Enumerate = new Enumerate()
7   {
8       Item = new EnumerateNewContext()
9   }
10 };
11 
12 using (mocks.Record())
13 {
14   requestValidator.Expect(r => r.ValidateEndTo(request));
15   requestValidator.Expect(r => r.ValidateMaxElements(request, allowNulls: true));
16   partialTarget.Expect(t => t.EnumerateOp(request)).CallOriginalMethod(OriginalCallOptions.CreateExpectation); 
17   partialTarget.Expect(t => t.CreateNewContextResponse(request)).Return(null);
18   contextManager.Expect(t => t.RemoveExpiredContexts());
19 }
20
21 using (mocks.Playback())
22 {
23   partialTarget.EnumerateOp(request);
24 }

编辑:删除不必要的信息。

问题是您的
CreateNewContextResponse
受到保护,并且

没有,还没有=[刚刚意识到如果没有PrivateObject参数,我无法创建EnumerationServiceBase_访问器。PartialMock问题仍然存在。CreateNewContextResponse是虚拟的吗?它必须是或Rhino。Mocks无法拦截它。它是虚拟的。它几乎不存在!
1  public virtual EnumerateOpResponse EnumerateOp(EnumerateOpRequest request)
2  {
3      EnumerateOpResponse response = null;
4  
5      if (request.Enumerate.Item is EnumerateNewContext)
6      {
7          try
8          {
9              _contextManager.RemoveExpiredContexts();
10         }
11         catch (Exception ex)
12         {
13             _logger.Warn("We're not cleaning up contexts effectively.", ex);
14         }
15 
16         _requestValidator.ValidateEndTo(request);                
17         _requestValidator.ValidateMaxElements(request, allowNulls: true);
18         response = CreateNewContextResponse(request);
19     }
20     else if (request.Enumerate.Item is EnumerationContextType)
21     {
22         _requestValidator.ValidateMaxElements(request, allowNulls: false);
23         response = CreateEnumerationContextResponse(request);
24     }
25     else
26     {
27         throw _faultProvider.GetItemNotRecognizedFault("The Enumerate.Item value was not of type EnumerateNewContext or EnumerationContextType.");
28     }
29     return response;
30 }