c# xunit xunit.net

c# - ¿Cuál es la forma idiomática de verificar el tamaño de la colección en xUnit?



xunit.net (3)

Encontré esto me da el mismo error:

Assert.Equal(2, vm.Errors.Count());

Y lanzarlo detuvo la aparición del error.

Assert.Equal(2, (int)vm.Errors.Count());

Tengo en mi suite de pruebas una prueba que va más o menos así:

[Fact] public void VerifySomeStuff() { var stuffCollection = GetSomeStuff(); Assert.Equal(1, stuffCollection.Count()); }

Esta prueba funciona como esperaba, pero cuando la ejecuto, xUnit imprime una advertencia:

advertencia xUnit2013: No use Assert.Equal () para verificar el tamaño de la colección.

Sin embargo, no se sugiere ninguna alternativa en la advertencia, y una búsqueda en Google me lleva al código fuente en xUnit para la prueba que verifica que esta advertencia esté impresa.

Si Assert.Equal() no es la forma correcta de verificar la longitud de una colección, ¿cuál es?

Para aclarar: me doy cuenta de que podría "engañar" a xUnit para que no emita esta advertencia, por ejemplo, extrayendo una variable o usando Assert.True(stuff.Count() == 1) lugar. El último es simplemente hacky, y el primero parece que si xUnit intenta, por ejemplo, evitar múltiples iteraciones de un IEnumerable<T> , esta es la forma incorrecta de hacerlo (porque obtendré pistas del compilador sobre eso por separado, si es un problema), y xUnit nunca debería tener que evaluar la entrada más de una vez (de hecho, probablemente obtendrá la misma entrada independientemente de la extracción de variables, debido a cómo funciona la llamada a la función C #).

Por lo tanto, no solo estoy interesado en eliminar esa advertencia de mi salida. Una respuesta a mi pregunta también explica por qué esa advertencia está incluida en la biblioteca en primer lugar, y por qué cualquier enfoque que debería usar en su lugar es mejor.


Tuve el mismo problema cuando utilicé la propiedad Count como se muestra a continuación en xUnit.

Después, uso la función Count () en la colección, solucionó mi problema.


Xunit ofrece soluciones rápidas para la mayoría de sus advertencias, por lo que debería poder ver lo que considera "correcto".

En su caso, quiere que use Assert.Single ya que espera exactamente un artículo. Si estuviera afirmando un número arbitrario, como 412, entonces no le daría una advertencia sobre el uso de Count . Solo sugerirá usar Single si espera un artículo, o Empty si no espera ningún artículo.