2014-09-04 2 views
1

Je travaille avec Visual Studio et écrit des cas de test Nunit. Lors de l'écriture des cas de test, j'ai rencontré une classe qui possède une méthode protégée et cette méthode rejetant ainsi une exception de type "NotImplementedException". J'ai essayé d'utiliser le mot-clé Invoke mais Ncover ne couvre pas cette partie. J'ai également essayé d'utiliser try catch mais mon réviseur de code dit de ne pas utiliser try catch block dans les cas de test. Donc, ami est-il un autre moyen d'écrire un cas de test pour ce type de problème. Je mentionne la classe et les cas de test, s'il vous plaît dites-moi comment le résoudre.Comment écrire un cas de test pour une exception de lancement de méthode protégée?

Classe fichier: -

public class UpdateMacActivityPriorityTranslator : EntityMapperTranslator<object, CSUpdateMACActivityPriorityResponseType> 
    { 

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

cas de test: -

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

Vous could envisager d'avoir 'class' (appareil) contenant votre test (' BusinessToServiceTest') dériver de la classe à tester, qui est de 'UpdateMacActivityPriorityTranslator'. Mais il peut y avoir des inconvénients. Addition: Si vous avez fait cela, ce serait simplement 'NUnit.Framework.Assert.Throws (() => BusinessToService (service, valeur));' –

+0

@JeppeStigNielsen, oui je fais la même chose, mais comment gérer l'exception sans utiliser try catch block. –

+0

@ChandanMishra Pourquoi cette exception est-elle ici? – samy

Répondre

1

Si votre class (appareil) contenant la méthode d'essai BusinessToServiceTest dérive déjà de (a comme classe de base) UpdateMacActivityPriorityTranslator, je suppose vous pouvez simplement faire:

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) 
     ); 
} 

ou yo u pourrait simplement utiliser this au lieu de updateMacActivityPriorityTranslator, donc:

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, son travail pour moi et aussi il a réduit la longueur du cas de test aussi. –

0

Dans votre appareil d'essai, mettre en œuvre une classe imbriquée privée qui hérite de UpdateMacActivityPriorityTranslator et expose la méthode protégée par une méthode de test public:

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

Avec cela, vous pouvez tester la méthode protégée à travers la classe de test et appeler naturellement la méthode.

var translator = new TestUpdateMacActivityPriorityTranslator(); 

Assert.Catch<NotImplementedException>(() => translator.TestBusinessToService(null, null)); 
Questions connexes