c# - mvc - Pruebas unitarias de operaciones flotantes en Visual Studio 2008 Pro
pruebas unitarias en c# con vs2015 (5)
Tengo algunas pruebas unitarias de C # que realizan algunas operaciones de flotación / doble y me gustaría probarlas por unidades. Assert.AreEqual no es suficiente debido a errores de redondeo.
Toma la conversión de unidades como ejemplo. 10.5 metros a pies tiene un factor de conversión de 3.281, así que obtengo 34.4505. Usar un factor de conversión más preciso me da 34.4488189. Quiero probar esto dentro de, digamos, 0.1 (por lo que 34.3488-34.5488 pasaría la prueba).
Podría cierta prueba manual del valor con una tolerancia en mi prueba de unidad, pero eso es muy repetitivo y el mensaje de falla no sería muy descriptivo (de nuevo sin tener que escribir mi propio mensaje de falla de afirmación):
Assert.IsTrue(Math.Abs(34.4488189 - value) < 0.1);
¿Cómo puedo realizar una prueba unitaria de mis operaciones de flotación dentro de una cierta tolerancia de error? No puedo encontrar ninguna clase de Assert que haga esto que viene con VS. ¿Me lo estoy perdiendo o tengo que rodar el mío?
¿Hay prácticas estándar en la prueba de flotadores / dobles para tener en cuenta?
Assert.AreEqual en MSTest tiene sobrecargas que aceptan un parámetro delta (tolerancia de error):
public static void AreEqual (double expected, double actual, double delta)
por ejemplo:
Assert.AreEqual(34.4488189, value, 0.1);
o, para la menor tolerancia posible:
Assert.AreEqual(34.4488189, value, double.Epsilon);
Estoy en mi teléfono, así que perdona la falta de código / enlaces.
Aquí hay una pregunta acerca de las extensiones favoritas de c # donde las personas han ampliado el tipo incorporado, como una cadena. Podría extender el tipo de coma flotante con un método que funcionaría así:
Myfloat.IsInTolerance(34.8f, 0.1f)
..que volvería verdadero si el flotador Myfloat fuera 0.1 a cada lado de 34.8. Podría hacerlo menos laborioso.
Mire las restricciones de igualdad de la unidad, ¡son flexibles! Espero que pueda ayudar!
NUnit puede comparar dentro de una tolerancia proporcionando un tercer argumento del método AreEqual. Echa un vistazo a las afirmaciones de igualdad de la Unidad
Visual Studio Unit Testing también tiene esto: Método AreEqual (doble, doble, doble, cadena)
Podrías echar un vistazo al NUnit :
//Compare Float values
Assert.AreEqual(float expected, float actual, float tolerance);
Assert.AreEqual(float expected, float actual, float tolerance, string message);
//Compare Double values
Assert.AreEqual(double expected, double actual, double tolerance);
Assert.AreEqual(double expected, double actual, double tolerance, string message)
(Arriba tomado de this artículo)
Más se enumeran here .