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 ?
Você está vendo a versão anterior da nova experiência da Alura que estamos preparando para você. Em breve, ela ganha uma identidade visual novinha totalmente pensada em potencializar seus estudos!
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...