web-dev-qa-db-fra.com

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.

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 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). 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'attribut TestMethod, les tests ont réussi. Il était évident qu'ils n'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?

40
Stefan de Kok

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.

100
Stefan de Kok

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

http://msdn.Microsoft.com/en-us/library/Microsoft.visualstudio.testtools.unittesting.classinitializeattribute.aspx

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

10
Stefan de Kok

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

1
Nadine