Existe uma maneira de ter um SetUpFixture que é executado uma vez por classe em vez de uma vez por namespace?
Cenário
Primeiro de tudo, eu sou novo nos testes - então, por favor, tenha paciência comigo. Dentro do meuprojeto de teste, existe uma pasta Controladores. A pasta Controladores pode conter um ControllerATest.cs, ControllerBTest.cs e ControllerCTest.cs. Como meu namespace se alinha à minha estrutura de pastas, todos eles compartilham o namespace MyProject.Tests.Controllers.
Pelo que eu li noDocumentação do NUnit SetUpFixture, um [SetUpFixture] dentro desse espaço para nome será executado uma vezpara todo o espaço para nome. Ou seja, se eu executar todos os meus testes de controlador de uma só vez - o SetUpFixture será executado apenas uma vez.
Problema
Como eu disse, cada teste de controlador compartilha um espaço para nome. SetUpFixtures se aplicam a todo o espaço para nome. E se eu quiser que cada controlador tenha suapróprio SetUpFixture? Este é um problema quando SetUpFixtures se aplica a espaços para nome inteiros. O que eu quero é algo que seja executado uma vez, e não por teste. Uma das coisas que faço dentro do SetUp do meu SetUpFixture é instanciar um controlador. Claro, eu poderia instanciar todos os 3 controladores no SetUpFixture, mas isso parece feio quando talvez eu esteja apenas testando o ControllerC. Isso realmente não parece limpo. Portanto, eu gostaria de um SetUpFixture que se apliquesó para a classe em que aparece, como ControllerCTests.
Pelo que li, essa funcionalidade específica parece impossível com o NUnit. E se não for possível com o NUnit, isso me faz pensar que não é um cenário comum. E se não for um cenário comum, estou fazendo algo errado. Minha pergunta é, o que? Talvez minha estrutura de teste esteja desativada e precise mudar. Ou talvezé possível com o NUnit?
Código
Um exemplo da minha estrutura desejada:
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()
{
//
}
}
}
}
Coisas que eu tentei
Sugestões?