Tengo una clase base con una buena cantidad de "meta programación" para darle la flexibilidad / abstracción que necesita para ser bastante genérica.
Tengo muchas subclases que usan los métodos comunes en la clase base, y tengo pruebas unitarias orientadas al comportamiento que cubren todos los casos en cada subclase.
¿Está bien omitir probar la clase base?
unit-testing
testing
Nathan
fuente
fuente
Respuestas:
Para verificar si tiene suficientes pruebas o no, puede verificar la cobertura de su código y la cobertura de su sucursal inducida por las pruebas (tal vez usando una herramienta de cobertura, tal vez manualmente revisando las rutas de código o usando un depurador).
Si llega a la conclusión de que las pruebas para las subclases le brindan una cobertura lo suficientemente alta para su código de clases base, entonces agregar pruebas adicionales obviamente no le brindará muchos beneficios. Por otro lado, si hay rutas de código que solo puede probar agregando pruebas específicas utilizando la clase base directamente, entonces debe seguir esta ruta.
Otra posible razón para "probar su clase base directamente" es que desea probar una función específica de esa clase "aisladamente". A veces puede ser más fácil diseñar casos de prueba directamente para un método específico, en lugar de solo probar ese método indirectamente llamando a los métodos de sus subclases que usan ese método.
Tenga en cuenta que cuando tiene una clase base genérica para la cual el escenario de uso típico es derivar una subclase, su clase base es probablemente abstracta. Entonces, para probar una clase de este tipo, debe hacer una derivación de todos modos. Para esta situación, probar "la clase base directamente" podría significar agregar una derivación especial solo para fines de prueba, por supuesto.
fuente
Tenemos pruebas para hacernos más productivos y reducir la cantidad de "problemas" de los que se quejan los clientes.
Entonces, dado que tiene pruebas unitarias orientadas al comportamiento que cubren todos los casos en cada subclase, no hay ningún beneficio para el cliente de que también pruebe la clase base directamente. Esto puede confirmarse cambiando algún código en la clase base y viendo si falla una prueba, por ejemplo, una línea de código común, o agregando un "no" a una "declaración if". (Solo verificar que cada línea de código esté cubierta por las pruebas no es lo suficientemente bueno).
Luego nos preguntamos si la prueba lo haría más productivo . Esto puede suceder de varias maneras.
Entonces, dado que las subclases están funcionando, no veo ningún punto en escribir pruebas directas para la clase base. Esto no es hoy, que no habría sido beneficios escribir estas pruebas en un estado temprano.
fuente