Tenho um cenario de testes que preciso criar uma ordem de execução, CT01, CT02, CT03....., no NUnit temos a marcação [Test, Order(1)], como posso criar esta ordem no XUnit ?
Tenho um cenario de testes que preciso criar uma ordem de execução, CT01, CT02, CT03....., no NUnit temos a marcação [Test, Order(1)], como posso criar esta ordem no XUnit ?
No XUnit, a ordem de execução dos testes é geralmente considerada uma prática ruim, pois os testes devem ser independentes e executáveis em qualquer ordem. No entanto, se você realmente precisar definir uma ordem específica para seus testes, pode usar o atributo [Collection]
juntamente com o atributo [Trait]
para agrupar os testes e definir a ordem de execução. Aqui está um exemplo:
Defina uma classe para agrupar os testes que devem ser executados em uma determinada ordem. Vamos chamá-la de OrderTests:
[Collection("OrderTests")]
public class OrderTestCollection
{
}
public class TestClass1
{
[Fact]
[Trait("Order", "1")]
[Trait("Category", "OrderTests")]
public void CT01()
{
// Teste CT01
}
}
public class TestClass2
{
[Fact]
[Trait("Order", "2")]
[Trait("Category", "OrderTests")]
public void CT02()
{
// Teste CT02
}
}
public class TestClass3
{
[Fact]
[Trait("Order", "3")]
[Trait("Category", "OrderTests")]
public void CT03()
{
// Teste CT03
}
}
Agora, você pode criar uma classe de teste separada para executar os testes na ordem desejada:
public class TestRunner
{
[Fact]
public void RunTestsInOrder()
{
var assembly = typeof(TestRunner).Assembly;
var testAssembly = new TestAssembly(assembly);
var testCollectionFactory = new XunitTestCollectionFactory();
var collectionDefinition = new CollectionDefinition(typeof(OrderTestCollection));
var testCollection = testCollectionFactory.Get(testAssembly, collectionDefinition);
var testCases = testCollection.TestCases.OrderBy(tc => tc.Traits.GetValue("Order"));
foreach (var testCase in testCases)
{
testCase.RunAsync(null).Wait();
}
}
}
Nesse exemplo, definimos três testes (CT01, CT02 e CT03) em classes separadas. Cada teste possui o atributo [Trait("Order", "...")], onde o valor numérico representa a ordem de execução desejada.
A classe TestRunner é responsável por executar os testes na ordem especificada. Ela obtém a coleção de testes agrupados usando o atributo [Collection] e, em seguida, obtém os casos de teste ordenados pela propriedade "Order" definida nos atributos [Trait]. Em seguida, os casos de teste são executados sequencialmente.
Lembre-se de que essa abordagem viola o princípio de que os testes devem ser independentes e executáveis em qualquer ordem. É altamente recomendado projetar os testes de forma que cada um possa ser executado independentemente e não dependa da ordem de execução para produzir resultados confiáveis.
Boa tarde Rodolfo Ghiggi, estava um tempo fora... Obrigado pela resposta, vou testar...