Заказ теста NUnit сначала запустите тест в базовом классе

#c# #.net #unit-testing #nunit

Вопрос:

Привет, я пытаюсь запустить тесты, где у каждого тестового приспособления другой сценарий, но у каждого есть общий случай, в котором я создал базовый класс/тестовое приспособление, и сказал, что общий тест должен выполняться сначала в моем порядке тестирования в каждом тестовом приспособлении, потому что я тестирую конечные точки api, где первому тесту (в базовом классе) нужно отправить простой запрос GET, чтобы убедиться, что конечная точка доступна, а остальные тесты в каждом тестовом исправлении тестируют разные запросы, которые не совпадают с другими тестовыми установками.

Мне удалось заказать тесты и приспособления для тестирования в том порядке, в котором они должны выполняться, но тест, находящийся в базовом классе, выполняется последним в каждом приспособлении, хотя я указал порядок для базового теста как 1. Есть ли в любом случае возможность сделать так, чтобы общий тест выполнялся первым, я уже знаю, что NUnit выполняет тесты в алфавитном порядке, но это не происходит, когда тест находится в базовом классе.

Моя структура кода выглядит примерно так:

 [TestFixture, Order(1)]
public abstract class BaseClass 
{
    [Test, Order(1)]
    public async Task CommonTest()
    {
         //Perform tests
    }
}

[TestFixture, Order(1)]
public class ClassA : BaseClass
{
    [Test, Order(1)]
    public async Task Test1()
    {
        //Perform Tests
    }

    [Test, Order(2)]
    public async Task Test2()
    {
        //Perform Tests
    }
}

[TestFixture, Order(2)]
public class ClassB : BaseClass
{
    [Test, Order(1)]
    public async Task Test3()
    {
        //Perform Tests
    }

    [Test, Order(2)]
    public async Task Test4()
    {
        //Perform Tests
    }
}
 

Когда тесты выполняются, порядок выглядит следующим образом:

 ClassA: Test1,
        Test2,
        CommonTest

ClassB: Test3,
        Test4,
        CommonTest
 

Но я требую, чтобы тесты выполнялись в таком порядке

 ClassA: CommonTest
        Test1
        Test2

ClassB: CommonTest
        Test3
        Test4        
 

Ответ №1:

Такое строгое упорядочение тестов в NUnit является некоторым нарушением его замысла, заключающегося в поддержке независимых модульных тестов. Тем не менее, вы не первый человек, который хочет это сделать. 🙂

OrderAttribute заказывает тесты в пределах a TestFixture . Абстрактный базовый класс на самом деле не является (средой выполнения) TestFixture , даже если вы использовали TestFixtureAttribute его на нем. Скорее, абстрактная база, в которую он вносит код, соответствует фактическим установкам времени выполнения, которые являются неабстрактными производными классами.

Я не пробовал этого, но я думаю, что вы получили бы желаемый результат, если бы зарезервировали некоторые значения порядка для использования в абстрактной базе и использовали значения, превышающие это число в производных классах.