¿Existe algún medio en el marco xUnit.net similar a las siguientes características de NUnit?
[Test, TestCaseSource("CurrencySamples")]
public void Format_Currency(decimal value, string expected){}
static object[][] CurrencySamples = new object[][]
{
new object[]{ 0m, "0,00"},
new object[]{ 0.0004m, "0,00"},
new object[]{ 5m, "5,00"},
new object[]{ 5.1m, "5,10"},
new object[]{ 5.12m, "5,12"},
new object[]{ 5.1234m, "5,12"},
new object[]{ 5.1250m, "5,13"}, // round
new object[]{ 5.1299m, "5,13"}, // round
}
Esto generará 8 pruebas separadas en NUnit GUI
[TestCase((string)null, Result = "1")]
[TestCase("", Result = "1")]
[TestCase(" ", Result = "1")]
[TestCase("1", Result = "2")]
[TestCase(" 1 ", Result = "2")]
public string IncrementDocNumber(string lastNum) { return "some"; }
Esto generará 5 pruebas separadas y comparará automáticamente los resultados ( Assert.Equal()
).
[Test]
public void StateTest(
[Values(1, 10)]
int input,
[Values(State.Initial, State.Rejected, State.Stopped)]
DocumentType docType
){}
Esto generará 6 pruebas combinatorias. No tiene precio.
Hace unos años probé xUnit y me encantó, pero carecía de estas características. No puedo vivir sin ellos. ¿Ha cambiado algo?
Respuestas:
xUnit ofrece una forma de ejecutar pruebas parametrizadas a través de algo llamado teorías de datos . El concepto es equivalente al que se encuentra en NUnit pero la funcionalidad que obtienes de la caja no es tan completa.
He aquí un ejemplo:
En este ejemplo, xUnit ejecutará la
Should_format_the_currency_value_correctly
prueba una vez porInlineDataAttribute
cada vez pasando el valor especificado como argumento.Las teorías de datos son un punto de extensibilidad que puede utilizar para crear nuevas formas de ejecutar sus pruebas parametrizadas. La forma en que se hace esto es creando nuevos atributos que inspeccionan y, opcionalmente, actúan sobre los argumentos y el valor de retorno de los métodos de prueba.
Se puede encontrar un buen ejemplo práctico de cómo las teorías de datos de xUnit pueden extenderse en AutoFixture 's AutoData y InlineAutoData teorías.
fuente
[Theory]
atributo no está disponible.Permítanme lanzar una muestra más aquí, por si acaso le ahorra algo de tiempo a alguien.
fuente
En su primera solicitud, puede seguir los ejemplos que se encuentran aquí .
Puede construir una clase estática que contenga los datos necesarios para una colección de pruebas.
Luego, usando el atributo MemberData, defina la prueba como tal
o si está usando C # 6.0,
El primer argumento de MemberDataAttribute le permite definir el miembro que usa como fuente de datos, por lo que tiene una buena cantidad de flexibilidad en la reutilización.
fuente
Según este artículo de xUnit, tiene tres opciones de "parametrización":
Ejemplo de InlineData
Ejemplo de ClassData
Ejemplo de MemberData
fuente
Encontré una biblioteca que produce una funcionalidad equivalente al
[Values]
atributo de NUnit llamado Xunit.Combinatorial :Le permite especificar valores a nivel de parámetro:
O puede hacer que implícitamente calcule el número mínimo de invocaciones para cubrir todas las combinaciones posibles:
fuente
Acepté todas las respuestas aquí y, además, utilicé los
TheoryData<,>
tipos genéricos de XUnit para brindarme definiciones de datos seguras, fáciles de leer y escribir para el atributo 'MemberData' en mi prueba, según este ejemplo:NB con VS2017 (15.3.3), C # 7 y XUnit 2.2.0 para .NET Core
fuente