web-dev-qa-db-fra.com

Est-il possible d'avoir un [OneTimeSetup] pour TOUS les tests?

J'utilise NUnit pour exécuter des tests de sélénium et j'ai un problème mineur que je veux voir si je peux me corriger. Ce qui se passe, c'est que [OneTimeSetUp] et [OneTimeTearDown] est en cours d'exécution après la fin de chaque luminaire. Ce que je veux, c'est d'exécuter [OneTimeSetUp] une fois lorsque les tests sont lancés, et le démontage de s'exécuter une fois que TOUS les appareils sont terminés.

TestBaseClass.cs

public class TestBaseClass
{

    [OneTimeSetUp]
    public void Init()
    {
         // Login
    }

    [OneTimeTearDown]
    public void TearDown()
    {
        Driver.Close();
    }
}

NavigationTests

[TestFixture]
public class NavigationTests : TestBaseClass
{
    // Tests
}

MainPageTests

[TestFixture]
public class MainPageTests : TestBaseClass
{
    // Tests
}
19
emmojo

OneTimeSetUpAttribute a deux utilisations.

Dans le premier, il marque une méthode dans un montage de test qui est exécutée une fois avant tout autre test dans ce fixtrue. Voilà comment vous l'utilisez, en héritant d'une classe de base. OneTimeSetUp apparaît, grâce à l'héritage, dans chacun de vos appareils dérivés mais il est toujours exécuté plusieurs fois, une fois pour chaque appareil.

La deuxième utilisation est dans un SetUpFixture . Si vous créez un SetUpFixture dans un espace de noms particulier, sa méthode OneTimeSetUp s'exécutera une fois , avant tout autre test dans cet espace de noms. Si vous créez le SetUpFixture en dehors de tout espace de noms, son OneTimeSetUp s'exécutera une fois avant tout test dans l'assembly.

MISE À JOUR: Quelqu'un a suggéré que la dernière phrase devrait dire "en dehors de tout espace de noms qui contient un TestFixture". Ce serait en fait incorrect. SetUpFixture doit être en dehors de tout espace de noms pour fonctionner au niveau de l'assembly. S'il existe un espace de noms de niveau supérieur, qui contient tout le code de test , vous pouvez également y placer un SetUpFixture, avec approximativement le même effet. Mais s'il se trouve dans un espace de noms avec aucun test en dessous, il ne sera jamais exécuté.

Pour plus d'informations sur SetUpFixture, voir docs .

22
Charlie