Pregunta

decir que tengo tres métodos, todos muy similares, pero con diferentes tipos de entrada:

void printLargestNumber(int a, int b) { ... }
void printLargestNumber(double a, double b) { ... }
void printLargestNumber(String numberAsString, String numberAsString) { ... }

Los tres utilizan la misma lógica subyacente. Por ejemplo: puede que la versión double es el único que compara los números, y los otros dos simplemente convertir sus entradas a double

.

Nos podía imaginar unas cuantas pruebas unitarias diferentes:. Primera entrada es mayor, la segunda es más grande, ambas entradas son negativos, etc.

Mi pregunta

¿Deben los tres métodos tienen el conjunto completo de pruebas (cuadro negro ya que no asumimos la implementación del núcleo es el mismo)

o

En caso sólo la versión double ser probado en gran medida y los otros dos a prueba para verificar la ligera conversión de parámetros (prueba de caja blanca, ya que sabemos que comparten la misma aplicación y ya se ha probado en las pruebas double)?

¿Fue útil?

Solución

Si todos estos métodos son públicos, es decir, exigible por el mundo exterior, sin duda probar todos ellos con un conjunto completo de pruebas. Una buena razón es que las pruebas de caja blanca son más frágiles que las pruebas de recuadro negro; si la implementación cambia el contrato público podría cambiar para algunos de esos métodos.

Otros consejos

Depende.

¿Cree usted que la implementación es probable que el cambio? Si es así, ir con las pruebas de caja negro.

Si se puede garantizar que la aplicación no cambiará ir con la caja blanca. Sin embargo, las posibilidades de que seas capaz de garantizar que esto no son 100%.

Se podría comprometer y hacer algunas de las pruebas de caja negra, particularmente alrededor de las condiciones de contorno. Sin embargo, escribir las pruebas debe ser fácil - por lo que no hay excusa desde ese punto de vista de no haciendo completa las pruebas de caja negro. El único factor limitante es el tiempo que tarda en ejecutar las pruebas.

Tal vez debería investigar la posibilidad de ejecutar las pruebas en paralelo.

Hay un conjunto de pruebas que hacen ejercicio de forma explícita las interfaces públicas. Me gustaría tratar a las personas como las pruebas de recuadro negro.

Hay un segundo conjunto de pruebas que podría ser visto como buscar en los casos de esquina de la aplicación. Esta es la prueba de caja blanca y sin duda tiene un lugar en una prueba unitaria. No se puede saber los caminos interesantes sin algún conocimiento aplicación de caja blanca. Me gustaría prestar especial atención al caso de cuerdas, ya que la interfaz permite a las cadenas que no puede convertir limpiamente a dobles, que empujan los límites de precisión, etc.

¿Me corté unas cuantas curvas en el caso número entero? Sé que empujó a los caminos en el doble caso, probablemente no debería, pero podría muy bien bajo presión de tiempo.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top