Глобальная настройка NUnit с разными пространствами имен

#c# #unit-testing #nunit

#c# #модульное тестирование #nunit

Вопрос:

Возможно ли иметь NUnit OneTimeSetUp для всей сборки?

В моем проекте у меня есть класс BaseTest, который находится в пространстве MyProject.Tests.Basics имен, и у меня есть класс setup, который содержит метод [OneTimeSetUp]. Класс SetUp находится в пространстве имен MyProject.Tests

Когда я запускаю тест, который является производным от класса BaseTest и находится, например, в пространстве MyProject.Tests.Data имен, тогда метод OneTimeSetUp не вызывается. Но когда я меняю пространство имен моего класса SetUp на пространство имен тестового класса, тогда метод вызывается просто отлично, но, конечно, только для этого конкретного тестового класса.

Итак, мой вопрос в том, как я могу реализовать класс SetUp, который работает для всей сборки?

Вот мои примеры кода:

Класс установки:

 namespace MyProject.Tests
{
    [SetUpFixture]
    public class SetUp
    {
        [OneTimeSetUp]
        public void Setup()
        {
            ...
        }
    }
}
  

Базовый тест:

 namespace MyProject.Tests.Basics
{
    [TestFixture]
    public abstract class BaseTest
    {
        public BaseTest()
        {
            ...
        }
    }
}
  

Тестовый класс:

 namespace MyProject.Tests.Data.IO.Files.DataFiles
{
    public class ExampleTest: BaseTest
    {
        [Test]
        public void Example()
        {
            ...
        }
    }
}
  

Ответ №1:

Для этого поместите свой SetUpFixture класс в глобальное пространство имен, то есть не помещайте его ни в одно пространство имен.

Это задокументировано в документах NUnit, как показано ниже:

SetUpFixture вне любого пространства имен обеспечивает настройку и демонтаж для всей сборки.

https://docs.nunit.org/articles/nunit/writing-tests/attributes/setupfixture.html