Есть ли способ иметь 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()
        {
            //
        }
    }
}
}    

Вещи, которые я пробовал

Перемещение каждого файла .cs в его собственную папку, чтобы они имели разные пространства имен. Технически это решает проблему, просто кажется немного уродливым иметь кучу подпапок только с 1 элементом в каждой. Ужасно, и больше не будет соответствовать структуре моего родительского проекта, который я собирался. Но - может быть, это путь.Не создавал экземпляр моего контроллера вSetUpFixture SetUp, и вместо этого делать это вTestFixture Настройте так, чтобы новый экземпляр создавался для каждого теста (например: 5 тестов = 5 отдельных экземпляров), а не один раз для класса или пространства имен. Хотя мне кажется, что если мне удастся создать только 1 экземпляр, я должен.

Предложения?

Ответы на вопрос(2)

Ваш ответ на вопрос