Tengo en mi suite de pruebas una prueba que es algo como esto:
[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 en su Assert.True(stuff.Count() == 1)
lugar. El último es simplemente hacky, y el primero parece que si xUnit está, por ejemplo, tratando de evitar múltiples iteraciones de un IEnumerable<T>
, entonces este es el camino equivocado (porque obtendré sugerencias del compilador sobre eso por separado si es un problema), y xUnit en sí mismo 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 la variable, debido a cómo funciona la llamada a la función C #).
Entonces, 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 deba usar es mejor.
stuffCollection.Count()
en una variable separada y la pasa a la aserción, ¿le da el mismo error?