c# - unitarias - Cómo configurar la secuencia de casos de prueba en xUnit
unit test c# ejemplo (3)
No puedes, por diseño. Es deliberadamente aleatorio para evitar que alguien obtenga uno de esos por deseo o por accidente.
La aleatoriedad es solo para una clase de prueba determinada, por lo que puede lograr sus objetivos envolviendo los elementos que desea controlar dentro de una clase anidada, pero en ese caso, siempre terminará con un orden aleatorio cada vez que tener más de dos métodos de prueba en una clase.
Si está tratando de administrar la creación de dispositivos o contexto, el mecanismo IUseFixture<T>
puede ser apropiado. Consulte la hoja de trucos de xUnit para ver ejemplos.
Pero realmente necesitas decirnos más sobre lo que estás tratando de hacer o simplemente tendremos que ser especulativos.
He escrito los casos de prueba xUnit en C #. Esa clase de prueba contiene tantos métodos. Necesito ejecutar todos los casos de prueba en una secuencia. ¿Cómo puedo configurar la secuencia de casos de prueba en xUnit?
Testpriority: en la parte inferior de this página.
[PrioritizedFixture]
public class MyTests
{
[Fact, TestPriority(1)]
public void FirstTest()
{
// Test code here is always run first
}
[Fact, TestPriority(2)]
public void SeccondTest()
{
// Test code here is run second
}
}
Por cierto, tengo el mismo problema en este momento. Y sí, no es el arte limpio ... pero QA quería una prueba manual ... así que una prueba automatizada con un pedido específico ya es un gran salto para ellos ... (tos) y sí, no es realmente una prueba unitaria ...
En xUnit 2. * esto se puede lograr usando el atributo TestCaseOrderer
para designar una estrategia de ordenación, que se puede usar para hacer referencia a un atributo que se anota en cada prueba para denotar un orden.
Por ejemplo:
Estrategia de pedidos
[assembly: CollectionBehavior(DisableTestParallelization = true)]
public class PriorityOrderer : ITestCaseOrderer
{
public IEnumerable<TTestCase> OrderTestCases<TTestCase>(IEnumerable<TTestCase> testCases) where TTestCase : ITestCase
{
var sortedMethods = new SortedDictionary<int, List<TTestCase>>();
foreach (TTestCase testCase in testCases)
{
int priority = 0;
foreach (IAttributeInfo attr in testCase.TestMethod.Method.GetCustomAttributes((typeof(TestPriorityAttribute).AssemblyQualifiedName)))
priority = attr.GetNamedArgument<int>("Priority");
GetOrCreate(sortedMethods, priority).Add(testCase);
}
foreach (var list in sortedMethods.Keys.Select(priority => sortedMethods[priority]))
{
list.Sort((x, y) => StringComparer.OrdinalIgnoreCase.Compare(x.TestMethod.Method.Name, y.TestMethod.Method.Name));
foreach (TTestCase testCase in list)
yield return testCase;
}
}
static TValue GetOrCreate<TKey, TValue>(IDictionary<TKey, TValue> dictionary, TKey key) where TValue : new()
{
TValue result;
if (dictionary.TryGetValue(key, out result)) return result;
result = new TValue();
dictionary[key] = result;
return result;
}
}
Atributo
[AttributeUsage(AttributeTargets.Method, AllowMultiple = false)]
public class TestPriorityAttribute : Attribute
{
public TestPriorityAttribute(int priority)
{
Priority = priority;
}
public int Priority { get; private set; }
}
Casos de prueba
[TestCaseOrderer("FullNameOfOrderStrategyHere", "OrderStrategyAssemblyName")]
public class PriorityOrderExamples
{
[Fact, TestPriority(5)]
public void Test3()
{
// called third
}
[Fact, TestPriority(0)]
public void Test2()
{
// called second
}
[Fact, TestPriority(-5)]
public void Test1()
{
// called first
}
}
xUnit 2. * pedir muestras here