visual unit tutorial test studio net ejemplo unit-testing nunit mstest parameterized-unit-test

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:

https://github.com/dzhariy/mstest-rows


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; } } }