如何解决为什么我的RhinoMocks PartialMock方法调用没有被模拟?
| 我正在创建一个局部模拟,以测试基类的受保护的辅助方法。我对是否应该使用受保护方法还是应该将其作为注入依赖项的辩论不太感兴趣,因为我真的很感兴趣看到下面的过程正常工作。 EnumerationServiceBase_Accessor是VSTS 2010生成的私有访问对象。除了第17行没有有效地建立一个期望以拦截对CreateNewContextResponse(request)的调用这一事实之外,下面的所有内容都运行良好,该期望是在回放过程中partialTarget.EnumerateOp(request)所调用的受保护方法。而是调用了基类的实际实现。我在这里做错了什么?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 }
这是EnumerationServiceBase.cs中实现的EnumerateOp(request)
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 }
编辑:删除不必要的信息。解决方法
问题是您的
CreateNewContextResponse
受保护,并且您不能使用Rhino Mocks模拟受保护的方法。版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。