Les Classes marquées avec TestInitialize et TestCleanup ne s'exécutent pas
J'ai eu du mal avec celui-ci, j'espère que cela aidera quelqu'un d'autre.
En créant des tests unitaires à L'aide de MsTest, j'ai découvert que je répétais le même code dans chaque test, et j'ai trouvé quelques attributs pratiques(TestInitialize
, TestCleanup
, ClassInitialize
, et ClassCleanup
).
Soi-disant, Lorsque vous marquez une méthode avec l'un de ces attributs, elle devrait s'exécuter automatiquement (avant chaque test, après chaque test, avant tous les tests et après tous les tests respectivement). Malheureusement, cela n'a pas arriver, et mes tests ont échoué. Si vous appelez directement ces méthodes à partir des classes marquées avec l'attribut TestMethod
, les tests ont réussi. Il était évident qu'ils ne s'exécutaient pas seuls.
Voici un exemple de code que j'utilisais:
[TestInitialize()]
private void Setup()
{
_factory = new Factory();
_factory.Start();
}
Alors pourquoi cela ne s'exécute-t-il pas?
3 réponses
L'astuce consiste à faire ces méthodes public
:
[TestInitialize()]
public void Setup()
{
_factory = new Factory();
_factory.Start();
}
Quand ils sont private
ils ne s'exécutent pas.
TestInitialize et TestCleanup sont exécutés avant et après tous les tests, pas avant et après chacun.
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
L'exemple de code montre comment utiliser TestInitialize, ClassInitialize et AssemblyInitialize.
J'ai aussi eu le problème et-en raison de mon malentendu sur la façon dont les méthodes sont appelées-Je l'ai résolu avec ceci: faites en sorte que vos tests héritent de la classe contenant les méthodes TestInitialize et TestCleanup.