Почему мой вызов метода RhinoMocks PartialMock не является ложным - PullRequest
1 голос
/ 19 апреля 2011

Я создаю частичный макет для проверки защищенного вспомогательного метода базового класса. Меня не слишком интересует дискуссия о том, должен ли защищенный метод присутствовать или это должна быть введенная зависимость, потому что я действительно заинтересован в том, чтобы процесс ниже работал.

EnumerationServiceBase_Accessor - это сгенерированный объект частного доступа VSTS 2010. Все, что ниже, работает хорошо, за исключением того факта, что строка 17 не устанавливает ожидание, которое перехватывает вызов CreateNewContextResponse (запрос), который является защищенным методом, который вызывается частичным целевым значением. Вместо этого вызывается фактическая реализация базового класса. Что я тут не так делаю?

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 }

И это EnumerateOp (запрос), реализованный в EnumerationServiceBase.cs

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 }

РЕДАКТИРОВАТЬ: Удалена ненужная информация.

1 Ответ

2 голосов
/ 05 октября 2011

Проблема в том, что ваш CreateNewContextResponse защищен и Вы не можете имитировать защищенные методы с помощью Rhino Mocks.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...