Classes marquées avec TestInitialize et TestCleanup ne s’exécutant pas

Je me suis battu avec celui-ci, j’espère que cela aidera quelqu’un d’autre.

Lors de la création de tests unitaires à l’aide de MsTest, j’ai découvert que je répétais le même code dans chaque test et que je trouvais quelques atsortingbuts pratiques ( TestInitialize , TestCleanup , ClassInitialize et ClassCleanup ).

Soi-disant, lorsque vous marquez une méthode avec l’un de ces atsortingbuts, elle devrait s’exécuter automatiquement (avant chaque test, après chaque test, avant tous les tests et après tous les tests, respectivement). Frustrant, cela ne s’est pas produit et mes tests ont échoué. Si vous appelez directement ces méthodes à partir des classes marquées avec l’atsortingbut TestMethod , les tests ont réussi. Il était évident qu’ils ne s’exécutaient pas par eux-mêmes.

Voici un exemple de code que j’utilisais:

 [TestInitialize()] private void Setup() { _factory = new Factory(); _factory.Start(); } 

Alors, pourquoi n’est-ce pas en cours d’exécution?

L’astuce consiste à rendre ces méthodes public :

 [TestInitialize()] public void Setup() { _factory = new Factory(); _factory.Start(); } 

Quand ils sont private ils n’exécutent pas.

TestInitialize et TestCleanup sont exécutés avant et après tous les tests, pas avant et après chacun des tests.

C’est faux, voir par exemple ce lien: http://social.msdn.microsoft.com/Forums/en-US/vststest/thread/85fb6549-cbaa-4dbf-bc3c-ddf1e4651bcf

Voir aussi MSDN

http://msdn.microsoft.com/en-us/library/microsoft.visualstudio.testtools.unittesting.classinitializeatsortingbute.aspx

L’exemple de code montre comment utiliser TestInitialize, ClassInitialize et AssemblyInitialize.

J’ai également eu le problème et – en raison de mon incompréhension de la façon dont les méthodes sont appelées – a résolu le problème avec ceci: Faites en sorte que vos tests héritent de la classe contenant les méthodes TestInitialize et TestCleanup.