Estoy escribiendo una pequeña utilidad para calcular una fórmula matemática complicada (utilizando la biblioteca commons-math para integración y búsqueda de raíz). Intenté escribirlo de la misma manera que una aplicación comercial normal, sin embargo, descubrí que estoy obteniendo un número cada vez mayor de clases. Para obtener el primer paso de los cálculos (fórmula de 1 línea con 2 integrales), ya escribí 3 clases por cada poquito de cálculo, para poder usar la inyección de dependencia y simular todas las llamadas a commons-math. Sin embargo, está perdiendo el control, terminaré con 20 clases por un problema que podría resolverse en 2 pantallas en una clase (sin pruebas de unidad). ¿Cuál sería tu enfoque preferido? Estoy muy tentado de solo confiar en la aceptación y las pruebas de nivel superior para esta.Prueba de unidad código matemático
Respuesta
No deje que las pruebas creen un código completamente inutilizable e incomprensible. Y no sobre-diseñar el ser funcional con un enfoque orientado a objetos.
Está probando una función, es decir, sin estado que produce el mismo resultado para los mismos argumentos. Y creo que así es como debes probarlo: dale argumentos de todas las posibles clases de equivalencia y afirma sobre el resultado.
+1: Estoy de acuerdo. Pero, haga lo que haga, no omita las pruebas unitarias en esta función de forma aislada. Si lo hace, lo arrepentirá cuando intente probar ensamblajes que lo incluyan. Escribo desde una amarga experiencia. –
En mi experiencia, debe usar la unidad de prueba como un control de cordura y una posible verificación de regresión. Las pruebas unitarias deben ser lo más completas posible, por supuesto, pero a veces es muy tedioso probar por completo la funcionalidad completa del código.
Pruebas unitarias no son una prueba formal. No pueden y no van a prevenir futuros errores y problemas con su código. Pruebe los casos de uso común del código. Si necesita una gran cantidad de confiabilidad, necesitará crear un gran repositorio de pruebas de regresión. Afortunadamente, para problemas comunes, hay algunas bases de datos en línea para ese tipo de cosas. TPLP por ejemplo, es una base de datos de problemas (y soluciones) para Theorem Provers.
Una técnica que a veces me funciona ... normalmente en código matemático, hay métodos "fáciles pero lentos", y métodos "rápidos pero difíciles de programar". Al escribir el código, desea utilizar el rápido pero difícil de escribir (por lo que espera errores). Entonces ... haz la forma rápida del sistema bajo prueba (SUT). Cuando realizas una prueba unitaria, crea 1000 problemas aleatorios y resuélvelos con el método "fácil pero lento". Luego, ejecute el SUT y asegúrese de que las respuestas sean análogas.
Asumiendo, por supuesto ... que la creación de problemas aleatorios es un problema fácil de resolver. A veces lo es, a veces no lo es. Es difícil de decir sin que nos cuentes sobre el código matemático en sí. Ahora ... ¿Esto consigue TODOS los casos? No. Pero obtendrá los casos "comunes". Y si aparece un caso de esquina en la práctica, envuélvelo en una Prueba de Unidad y corríjalo en la próxima versión de su código.
- 1. Prueba de unidad de dependencia de código
- 2. Unidad de prueba de código privado
- 3. Unidad y Prueba funcional Código de iPhone?
- 4. Prueba de unidad CacheManager
- 5. Código de respuesta de prueba de unidad MVC3
- 6. Prueba de unidad Código de Javascript Incrustado dentro de PHP
- 7. (Unidad) Prueba de ArrayAdapter
- 8. Unidad de prueba EJB
- 9. ¿Puede usted unidad de prueba de código ofuscado?
- 10. Código de prueba de unidad que obtiene la hora actual
- 11. Código de prueba de unidad que llama a métodos estáticos
- 12. unidad que prueba una unidad de trabajo
- 13. código de JavaScript para el objeto matemático
- 14. Ejemplos de prueba de unidad?
- 15. Python: unidad de prueba basada en el código del socket?
- 16. Unidad de prueba Código que llama a VirtualPathUtility.ToAbsolute
- 17. código Prueba de la unidad con dependencias externas impredecibles
- 18. unidad prueba olor
- 19. Unidad Prueba Assert.AreEqual failed
- 20. Prueba de Unidad de Curado
- 21. ASP.NET - Unidad MembershipProvider prueba
- 22. Eliminar prueba :: unidad
- 23. Código bacteria: comportamiento matemático en evolución
- 24. ¿Cómo generar dinámicamente el código matemático?
- 25. instaladores de prueba de unidad
- 26. Herencia de prueba de unidad
- 27. Sockets de prueba de unidad
- 28. . Prueba de unidad .NET - Mejores prácticas para ocultar costuras de prueba en el código de versión
- 29. Prueba de unidad post mortem
- 30. Messagebox y prueba de unidad
Usted habla de burlarse de commons-math. Yo no haría eso. Commons-math es una pieza de código sólida y confiable. Úselo en sus pruebas en lugar de burlarse de él. ¿Eso simplifica las cosas? – DJClayworth
Si necesita simular 20 clases, ¿quizás las clases están demasiado unidas? (alta cohesión). –