#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
его на нем. Скорее, абстрактная база, в которую он вносит код, соответствует фактическим установкам времени выполнения, которые являются неабстрактными производными классами.
Я не пробовал этого, но я думаю, что вы получили бы желаемый результат, если бы зарезервировали некоторые значения порядка для использования в абстрактной базе и использовали значения, превышающие это число в производных классах.