web-dev-qa-db-fra.com

Initialisation unique pour Nunit

Où dois-je placer du code qui ne doit s'exécuter qu'une seule fois (et non une fois par classe)? Un exemple serait une instruction qui initialise la chaîne de connexion DB. Et je n'ai besoin de l'exécuter qu'une seule fois et je ne veux pas placer une nouvelle méthode dans chaque classe "TestFixture" juste pour le faire.

52
code-ninja

Le [SetUpFixture] L'attribut vous permet d'exécuter une fois le code d'installation et/ou de démontage pour tous les tests sous le même espace de noms.

Ici sont les documents sur SetUpFixture. Selon les documents:

Un SetUpFixture en dehors de tout espace de noms fournit SetUp et TearDown pour l'ensemble de l'assemblage.

Donc, si vous avez besoin de SetUp et TearDown pour tous les tests, assurez-vous simplement que la classe SetUpFixture n'est pas dans un espace de noms.

Alternativement, vous pouvez toujours définir une classe statique strictement dans le but de définir des variables de test "globales".

60
Ben Hoffstein

Créez une classe (j'appelle la mienne Config) et décorez-la avec le [SetUpFixture] attribut. Le [SetUp] et [TearDown] les méthodes de la classe s'exécuteront une fois.

[SetUpFixture]
public class Config
{
    [SetUp]  // [OneTimeSetUp] for NUnit 3.0 and up; see http://bartwullems.blogspot.com/2015/12/upgrading-to-nunit-30-onetimesetup.html
    public void SetUp()
    {
    }

    [TearDown]  // [OneTimeTearDown] for NUnit 3.0 and up
    public void TearDown()
    {
    }
}
42
Jamie Ide

NUnit :

[SetUpFixture]
public class TestLogging
{
    [OneTimeSetUp]
    public void Setup()
    {
        DoStuff();
    }
}
13
K0D4