Est-il un moyen d'avoir un SetUpFixture qui s'exécute une fois par classe au lieu d'une fois par espace de noms?

Scénario

Tout d'abord, je suis nouveau sur test - alors, s'il vous plaît garder avec moi. À l'intérieur de mon projet de test, il y a un dossier Controllers. Les Contrôleurs de dossier peut contenir un ControllerATest.cs, ControllerBTest.cs, et ControllerCTest.cs. Parce que mon espace de noms s'aligne avec ma structure de dossier, ils partagent tous l'espace de noms MyProject.Les Tests.Les contrôleurs.

De ce que j'ai lu dans le NUnit SetUpFixture Documentation, un [SetUpFixture] à l'intérieur de cet espace de noms sera exécuté une fois pour l'ensemble de l'espace de noms. C'est, si je lance tous mes contrôleur de tests à la fois - la SetUpFixture sera exécutée qu'une seule fois.

Problème

Comme je l'ai dit, chaque contrôleur de test d'actions d'un espace de noms. SetUpFixtures s'appliquent à l'ensemble de l'espace de noms. Que faire si je veux que chaque contrôleur de ont leur propre SetUpFixture? C'est un problème quand SetUpFixtures s'appliquent à l'ensemble des espaces de noms. Ce que je veux, c'est quelque chose qui s'exécute une fois, et non pas par test. L'une des choses que je fais à l'intérieur de mon SetUpFixture de l'Installation est d'instancier un contrôleur. Bien sûr, je pourrais instancier tous les 3 contrôleurs de la SetUpFixture, mais cela semble laid quand je suis peut-être seulement de tester ControllerC. Ça ne semble pas propre. Donc, je voudrais un SetUpFixture qui s'applique seulement de la classe dans lequel il apparaît, comme ControllerCTests.

De ce que j'ai lu, cette fonctionnalité semble être impossible avec NUnit. Et si il n'est pas possible avec NUnit, qui me fait penser que ce n'est pas un scénario commun. Et si ce n'est pas un scénario commun, je suis en train de faire quelque chose de mal. Ma question est, que? Peut-être que mes tests de structure est éteint et qu'il a besoin de changer. Ou peut-être qu'il est possible avec NUnit?

Code

Un exemple de ma structure souhaitée:

namespace MyProject.Tests.Controllers
{
public class ControllerATests
{
    private static IMyProjectRepository _fakeRepository;
    private static ControllerA _controllerA;

    [SetUpFixture]
    public class before_tests_run
    {
        [SetUp]
        public void ControllerASetup()
        {
            _fakeRepository = FakeRepository.Create();

            _controllerA = new ControllerA(_fakeRepository);
        }
    }

    [TestFixture]
    public class when_ControllerA_index_get_action_executes
    {
        [Test]
        public void it_does_something()
        {
            //
        }

        [Test]
        public void it_does_something_else()
        {
            //
        }
    }
}

public class ControllerBTests
{
    private static IMyProjectRepository _fakeRepository;
    private static ControllerB _controllerB;

    [SetUpFixture]
    public class before_tests_run
    {
        [SetUp]
        public void ControllerBSetup()
        {
            _fakeRepository = FakeRepository.Create();

            _controllerB = new ControllerB(_fakeRepository);
        }
    }

    [TestFixture]
    public class when_ControllerB_index_get_action_executes
    {
        [Test]
        public void it_does_something()
        {
            //
        }

        [Test]
        public void it_does_something_else()
        {
            //
        }
    }
}
}    

Choses que j'ai Essayé

  • Déplacement de chacun .cs fichier dans son propre dossier, de sorte qu'ils ont des espaces de noms différents. Techniquement, cela résout le problème, il semble juste un peu moche d'avoir un tas de sous-dossiers avec seulement 1 point dans chacun d'eux. Laid, et ne correspond plus à mes parents du projet de la structure qui j'allais pour. Mais c'est peut-être le chemin à parcourir.
  • Pas l'instanciation de mon contrôleur dans le SetUpFixture de l'Installation, et au lieu de le faire dans le TestFixture de l'Installation afin de un nouveau est instanciée pour chaque test (ex: 5 tests = 5 instances distinctes) au lieu d'une fois par classe ou de l'espace. Bien qu'il semble comme si je pouvais m'en sortir seule de la création de 1 par exemple, je devrais.

Suggestions?

InformationsquelleAutor EF0 | 2014-04-18