La principal excusa del desarrollador para no tener una buena unidad de prueba es "El código no está diseñado de manera comprobable". Estoy tratando de entender qué tipo de diseño y código no se pueden probar en la unidad.
unit-testing
manizzzz
fuente
fuente
Respuestas:
Varios factores pueden dificultar la prueba unitaria del código. Cuando este es el caso, la refactorización ayuda a mejorar el código para que sea comprobable.
Algunos ejemplos de código que probablemente serían difíciles de probar:
function pGetDp_U(int i, int i2, string sText)
.Tenga en cuenta que la falta de una arquitectura clara no hace que el código sea difícil de probar, ya que las pruebas unitarias se refieren a pequeñas partes del código. La arquitectura poco clara aún tendría un impacto negativo en la integración y las pruebas del sistema.
fuente
Hay muchas cosas que dificultan la prueba unitaria del código. Casualmente, muchos de ellos también dificultan el mantenimiento del código:
fuente
Ejemplos comunes de código que las personas no desean realizar pruebas unitarias:
Usando un marco simulado, todos estos ejemplos pueden ser probados en unidades. Es solo trabajo configurar los reemplazos simulados para las dependencias internas.
Cosas que realmente no pueden ser probadas:
fuente
Hay algunas áreas que pueden dificultar la escritura de pruebas unitarias. Sin embargo, quisiera enfatizar que eso no significa que deba descartar técnicas útiles directamente porque simplemente pueden agregar cierta complejidad a sus pruebas. Al igual que con cualquier codificación , debe hacer su propio análisis para determinar si los beneficios superan los costos, y no aceptar ciegamente lo que publica un tipo aleatorio en la red.
Mal escrito del código diseñado
La dependencia del estado en un ámbito diferente
El costo para la mayoría de estas espirales está fuera de control a menos que sepa qué está haciendo. Desafortunadamente, muchos a menudo no saben cómo usar estas técnicas para mitigar cosas como la complejidad de las pruebas.
Externo / Estado del sistema
Concurrencia
fuente
No existe un código que no pueda probarse. Sin embargo, hay algunos ejemplos de código que es REALMENTE, REALMENTE difícil de probar (hasta el punto de que posiblemente no valga la pena):
Interacciones de hardware: si el código manipula directamente el hardware (por ejemplo, escribir en un registro para mover un dispositivo físico), la prueba de la unidad puede ser demasiado difícil o costosa. Si usa hardware real para la prueba, eso puede ser costoso para obtener retroalimentación apropiada en el arnés de prueba (¡aún más equipo!), Y si no lo hace, debe emular el comportamiento exacto de los objetos físicos, no es un truco pequeño. algunas instancias
Interacciones del reloj: esto suele ser más fácil, porque casi siempre es posible burlarse de las funciones del reloj del sistema de manera bastante trivial. Pero cuando no puede hacerlo, estas pruebas se vuelven inmanejables: las pruebas que se basan en tiempo real tienden a tardar mucho tiempo en ejecutarse y, en mi experiencia, tienden a ser muy frágiles ya que las cargas del sistema hacen que las cosas tarden más de lo debido , causando fallas en la prueba fantasma.
fuente
Mis tres grupos principales para esto son:
código que depende de servicios externos
sistemas que no permiten que los evaluadores modifiquen el estado independientemente de la aplicación.
entornos de prueba que no replican la configuración de producción.
Esto es lo que más he experimentado como desarrollador convertido en ingeniero de control de calidad.
fuente