45 votes

Comment tester des classes abstraites unitaire

J'ai utilisé l'outil de création de tests unitaires dans Visual Studio et il essaie évidemment d'instancier mes classes abstraites.

Ma question est : dois-je essayer de tester unitairement la manière dont Visual Studio essaie de me le faire, ou dois-je créer une classe fictive à instancier, ou dois-je tester uniquement les méthodes qui utilisent cette classe abstraite ?

Merci.

86voto

sloth Points 40517

S'il y a des méthodes sur cette classe abstraite qui valent la peine d'être testées, alors vous devriez les tester. Vous pouvez toujours sous-classer la classe abstraite pour le test (et la nommer comme MyAbstractClassTesting) et tester cette nouvelle classe concrète.

8voto

blank Points 7947
  1. Il suffit de tester les classes d'implémentation.

  2. Vous pouvez toujours créer une implémentation spécifique pour les tests qui n'ajoute aucune fonctionnalité supplémentaire.

  3. Écoutez les épreuves. L'utilisation d'outils moqueurs qui font de la magie pour permettre de tester des classes abstraites et des méthodes privées, etc. est une odeur de code de test

0voto

mohammad almasi Points 214

utiliser à partir d'un faux dépôt :

 [testmethod]
       public void testwithmockrepository()
       {
           var mockrepository = new rhino.mocks.mockrepository();
           var mock = mockrepository.partialmock<myabstractclass>();

           using ( mockrepository.record() )
           {
               expect.call( mock.dosomething( arg<string>.is.anything ) ).return( "hi..." ).repeat.once();
           }
           using ( mockrepository.playback() )
           {
               assert.areequal( "hi..." , mock.dosomething( "salam" ) );
           }
       }

-1voto

Eru Points 325

Je ne testerais pas les classes abstraites pour une raison très simple : la classe d'implémentation peut avoir sa propre implémentation de certaines méthodes - si vous testez la classe abstraite, vous n'aurez aucune idée de la façon dont le code ultérieur se comporte réellement. De plus, si vous testez les méthodes implémentées de la classe abstraite, alors vous liez votre test avec l'implémentation de la classe abstraite - mais vous ne pouvez pas créer d'objet de classe abstraite, alors à quoi sert un tel test ? :)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X