unit testing - tutorial - MSTest Equivalente para las Pruebas Paramétricas de NUnit?
unit test.net core (6)
Ayudaría this ?
Esta semana estaba agregando algunas pruebas unitarias a un proyecto que es administrado por TFS, así que decidí usar el marco de pruebas de unidades "centrales" disponible con VS2008, y desafortunadamente no es compatible con RowTests. Pero tiene una característica similar llamada prueba unitaria controlada por datos. Con este enfoque, es un poco más complicado implementar el escenario RowTest "simple", pero también permite implementar más complicados.
NUnit admite una función en la que puede especificar un conjunto de entradas de datos para que una prueba unitaria se ejecute varias veces.
[RowTest]
[Row(1001,1,2,3)]
[Row(1,1001,2,3)]
[Row(1,2,1001,3)]
public void SumTests(int x, int y, int z, int expected)
{
...
}
¿Cuál es la mejor manera de lograr este mismo tipo de cosas usando MSTest? No puedo encontrar un conjunto similar de atributos.
En realidad, la prueba unitaria parametrizada (PUT) es una generalización natural de la prueba unitaria. Y Microsoft Research tiene un proyecto llamado Pex que generará el PUT para su Class Under Test (CUT) automáticamente. Pex es una herramienta de generación de entrada de prueba automática . En lugar de preparar los datos de prueba usted mismo, la herramienta Pex encontrará las entradas de interés para los parámetros de CUT y generará los casos de prueba unitarios en consecuencia. Por favor revisa here .
Mi respuesta es similar a @ oscar-e-fraxedas-tormo one.
Puede crear una subclase de una de las clases generadas que tienen de 1 a 100 métodos de prueba en el interior y proporcionar toda la lógica de prueba en la clase derivada. En el siguiente ejemplo:
[TestClass]
public class Ha_ha_ha_Test: MsTestRows.Rows.TestRows_42<string>
{
public override void TestMethod(string dataRow, int rowNumber)
{
Console.WriteLine(dataRow);
Assert.IsFalse(dataRow.Contains("3"));
}
public override string GetNextDataRow(int rowNumber)
{
return "data" + rowNumber;
}
}
La clase Ha_ha_ha_Test
contendrá 42
filas generadas (métodos). Para cada una de esta fila, se GetNextDataRow
método personalizado GetNextDataRow
para proporcionar los datos de prueba requeridos.
Más detalles:
Para aquellos que usan MSTest2, DataRow + DataTestMethod está disponible para hacer exactamente esto:
[DataRow(Enum.Item1, "Name1", 123)]
[DataRow(Enum.Item2, "Name2", 123)]
[DataRow(Enum.Item3, "Name3", 456)]
[DataTestMethod]
public void FooTest(EnumType item, string name, string number)
{
var response = ExecuteYourCode(item, name, number);
Assert.AreEqual(item, response.item);
}
Más sobre esto here
Puede crear una clase base con el método de prueba y los parámetros como propiedades virtuales. Cuando hereda de esta clase, solo necesita anular las propiedades con los valores deseados. Por favor vea el código de muestra:
public class Operation
{
public static int Add(int x, int y)
{
return x + y;
}
}
[TestClass]
public class AddTests : WorkItemTest
{
protected virtual int First{get { return 0; }}
protected virtual int Second{get { return 0; }}
[TestInitialize]
public virtual void Init()
{
//Init code
}
[TestCleanup]
public virtual void Clean()
{
//Clean code
}
[TestMethod]
[Description("x+y = y+x")]
public virtual void Test_operation_commutativity()
{
Assert.AreEqual(Operation.Add(Second, First), Operation.Add(First, Second));
}
}
[TestClass]
public class AddPositiveTest : AddTests
{
protected override int First { get { return 1; } }
protected override int Second { get { return 2; } }
}
[TestClass]
public class AddNegativeTest : AddTests
{
protected override int First { get { return -1; } }
protected override int Second { get { return -2; } }
}
Puede tener esta capacidad escribiendo una pequeña extensión de mstest como se muestra aquí.