2014-09-04 2 views
1

Я работаю с визуальной студией и записываю тесты Nunit. При написании тестовых случаев я столкнулся с классом, который имеет защищенный метод, и этот метод выбрасывает исключение типа NotImplementedException. Я пытался использовать Invoke key-word, но Ncover не покрывает эту часть. Я также попытался использовать try catch, но мой обозреватель кода говорит, что не использовать блок try catch в тестовых случаях. Итак, у друга есть другой способ написать тестовый пример для такого типа вопросов. Я упоминаю класс и тестовые примеры, пожалуйста, скажите мне, как его решить.Как написать тестовый пример для исключения исключений защищенного метода?

Класс File: -

public class UpdateMacActivityPriorityTranslator : EntityMapperTranslator<object, CSUpdateMACActivityPriorityResponseType> 
    { 

     protected override CSUpdateMACActivityPriorityResponseType BusinessToService(IEntityTranslatorService service, object value) 
     { 
      throw new NotImplementedException(); 
     } 
    } 

Тестовый случай: -

public void BusinessToServiceTest() 
     { 
      var updateMacActivityPriorityTranslator = new UpdateMacActivityPriorityTranslator(); 
      var service = MockRepository.GenerateStub<IEntityTranslatorService>(); 
      var value = new object(); 
      var invokeProtectedBusinessToService = new      PrivateObject(updateMacActivityPriorityTranslator,new PrivateType(                  typeof(UpdateMacActivityPriorityTranslator))); 
      NUnit.Framework.Assert.Throws<NotImplementedException>(
       () => 
       invokeProtectedBusinessToService.Invoke("BusinessToService", 
                 new object[] { service, value })); 
     } 
+0

Вас _could_ рассмотреть вопрос о том 'class' (прибор), содержащий тест (' BusinessToServiceTest') вывести из класса, чтобы проверить, что из 'UpdateMacActivityPriorityTranslator'. Но могут быть и недостатки. Дополнение: если вы это сделали, это будет просто «NUnit.Framework.Assert.Throws (() => BusinessToService (service, value));' –

+0

@JeppeStigNielsen, да, я делаю то же самое, но как обрабатывать исключение без использования блока try catch. –

+0

@ChandanMishra Почему это исключение? – samy

ответ

1

Если class (приспособление), содержащий метод испытания BusinessToServiceTest уже вытекает из (имеет в качестве базового класса) UpdateMacActivityPriorityTranslator, я думаю, вы могли бы просто сделать:

public void BusinessToServiceTest() 
{ 
    var updateMacActivityPriorityTranslator = new UpdateMacActivityPriorityTranslator(); 
    var service = MockRepository.GenerateStub<IEntityTranslatorService>(); 
    var value = new object(); 
    NUnit.Framework.Assert.Throws<NotImplementedException>(
     () => updateMacActivityPriorityTranslator.BusinessToService(service, value) 
     ); 
} 

или лет у могли просто использовать this вместо updateMacActivityPriorityTranslator, так:

public void BusinessToServiceTest() 
{ 
    var service = MockRepository.GenerateStub<IEntityTranslatorService>(); 
    var value = new object(); 
    NUnit.Framework.Assert.Throws<NotImplementedException>(
     () => BusinessToService(service, value) 
     ); 
} 
+0

thnx @Jeppe Stig Nielsen, работающий на меня, а также уменьшил длину тестового корпуса. –

0

В тестовом приспособлении, реализовать частный вложенный класс, который наследуется от UpdateMacActivityPriorityTranslator и выставляет защищенный метод с помощью метода общественного теста:

private class TestUpdateMacActivityPriorityTranslator : UpdateMacActivityPriorityTranslator 
{ 
    public CSUpdateMACActivityPriorityResponseType TestBusinessToService(IEntityTranslatorService service, object value) 
    { 
     return this.BusinessToService(service, value); 
    } 
} 

При этом вы можете протестировать защищенный метод через тестовый класс и, естественно, вызвать метод.

var translator = new TestUpdateMacActivityPriorityTranslator(); 

Assert.Catch<NotImplementedException>(() => translator.TestBusinessToService(null, null)); 
Смежные вопросы