Есть ли способ иметь SetUpFixture, который запускается один раз для класса, а не один раз для пространства имен?
сценарий
Прежде всего, я новичок в тестировании - поэтому, пожалуйста, потерпите меня. Внутри моеготестовый проект, есть папка Controllers. Папка Controllers может содержать ControllerATest.cs, ControllerBTest.cs и ControllerCTest.cs. Поскольку мое пространство имен совпадает с моей структурой папок, все они совместно используют пространство имен MyProject.Tests.Controllers.
Из того, что я прочитал вNUnit SetUpFixture Документация[SetUpFixture] внутри этого пространства имен будет запущен один раздля всего пространства имен, То есть, если я запускаю все свои тесты контроллера одновременно - SetUpFixture будет выполняться только один раз.
проблема
Как я уже сказал, каждый тест контроллера разделяет пространство имен. SetUpFixtures применяются ко всему пространству имен. Что если я хочу, чтобы у каждого контроллера был свойсвоя SetUpFixture? Это проблема, когда SetUpFixtures применяются ко всем пространствам имен. То, что я хочу, - это то, что выполняется один раз, а не для каждого теста. Одна из вещей, которые я делаю в SetUp моего SetUpFixture, - создание экземпляра контроллера. Конечно, я мог бы создать все 3 контроллера в SetUpFixture, но это кажется уродливым, когда, возможно, я только тестирую ControllerC. Это действительно не кажется чистым. Поэтому я хотел бы, чтобы SetUpFixture применялсятолько к классу, в котором он появляется, например, ControllerCTests.
Из того, что я прочитал, эта специфическая функциональность кажется невозможной в NUnit. И если это невозможно с NUnit, это заставляет меня думать, что это не обычный сценарий. И если это не обычный сценарий, я делаю что-то не так. Мой вопрос, что? Возможно, моя структура тестирования отключена, и она должна измениться. Или возможно этоявляется возможно с NUnit?
Код
Пример моей желаемой структуры:
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()
{
//
}
}
}
}
Вещи, которые я пробовал
Предложения?