68 votes

Méthode d'initialisation du test global pour MSTest

Question rapide, comment puis-je créer une méthode qui n'est exécutée qu'une seule fois avant que tous les tests de la solution ne soient exécutés.

0 votes

J'aimerais le savoir aussi :( Actuellement, j'ai une classe de base abstraite dont chaque TestClass hérite. Dans cette classe, j'ai une méthode TestInitialize. Le problème est que cette méthode est déclenchée à chaque fois qu'un nouveau test est exécuté !

0 votes

Faites en sorte que cette classe de base abstraite implémente un constructeur statique. Il ne sera déclenché qu'une seule fois avant l'exécution de tous les tests.

128voto

driis Points 70872

Créez une méthode statique publique, décorée avec la balise AssemblyInitialize attribut. Le cadre de test appellera ceci Configuration une fois par cycle de test :

[AssemblyInitialize]
public static void MyTestInitialize(TestContext testContext)
{}

Pour TearDown son :

[AssemblyCleanup]
public static void TearDown() 
{}

EDITAR:

Autre détail très important : la classe à laquelle appartient cette méthode doit être décorée avec [TestClass] . Sinon, la méthode d'initialisation ne sera pas exécutée.

4 votes

Si vous avez des tests dans plus d'une assemblée, MyTestInitialize sera appelé plus d'une fois pour votre exécution de test.

0 votes

Cela peut ne pas être clair - cela ne fonctionne pas pour tous les tests, mais pour chaque test RUN. Cela signifie que si vous exécutez un ensemble de tests, par exemple en exécutant tous les tests d'une classe en une seule fois ou tous les tests de l'assemblage en une seule fois, cette méthode est exécutée UNE FOIS pour tous les tests de cette exécution. Ils pourraient donc partager les résultats/effets secondaires de cette méthode, ou non, si un seul test était exécuté à la fois.

5voto

AspNyc Points 524

Pour souligner ce que @driis et @Malice ont dit dans la réponse acceptée, voici à quoi devrait ressembler votre classe d'initialisation de test global :

namespace ThanksDriis
{
    [TestClass]
    class GlobalTestInitializer
    {
        [AssemblyInitialize()]
        public static void MyTestInitialize(TestContext testContext)
        {
            // The test framework will call this method once -BEFORE- each test run.
        }

        [AssemblyCleanup]
        public static void TearDown() 
        {
            // The test framework will call this method once -AFTER- each test run.
        }
    }
}

1voto

Allen Points 74

Désolé pour le mauvais formatage...

        /// <summary>
        /// Use TestInitialize to run code before running each test
        /// Runs before every test executes
        /// </summary>
        [TestInitialize()]
        public void TestInitialize()
        {
           ...
           ...
        }

        /// <summary>
        /// Use TestCleanup to run code after each test has run
        /// Runs after every test executes
        /// </summary>
        [TestCleanup()]
        public void TestCleanup()
        {
           ...
           ...
        }

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