Pregunta

Cito este post de entrada del exubero . Creo que esta entrada beneficiará a todos los que están haciendo una prueba de unidad:

Hay una gran cantidad de métodos diferentes que comienzan con assert definido en la clase Assert de Junit. Cada uno de estos métodos tiene argumentos y semánticas ligeramente diferentes acerca de lo que están afirmando.

A continuación se muestran algunos usos irregulares de afirmar verdadero:

assertTrue("Objects must be the same", expected == actual);
assertTrue("Objects must be equal", expected.equals(actual));
assertTrue("Object must be null", actual == null);
assertTrue("Object must not be null", actual != null);

Algunos expertos en pruebas de unidad señalaron que el código anterior podría escribirse mejor como:

assertSame("Objects must be the same", expected, actual);
assertEquals("Objects must be equal", expected, actual);
assertNull("Object must be null", actual);
assertNotNull("Object must not be null", actual);

Una de las ventajas de usar el 'assertXXX ()' adecuado aumentará la legibilidad de la prueba de la unidad. ¿Alguien puede señalar qué otro beneficio de usar el 'afirmar XXX ()' apropiado?

¿Fue útil?

Solución

No soy un desarrollador de Java y no sé qué salidas de JUnit cuando falla una aserción. Muchos frameworks de pruebas unitarias que he estado usando producen mejor información de error cuando uso algo como assertEquals.

Déjame mostrarte un ejemplo de lo que estoy hablando:

assertTrue("Objects must be equal", "One" == "Two");
assertEquals("Objects must be equal", "One", "Two");

En el primer caso, puede tener una salida de error como esta:

Error: se esperaba que el verdadero real fuera falso.

Salida para el segundo caso:

Error: Ejecutado " Uno " real era " Dos " ;.

Como puede ver, el segundo caso proporciona información mejor y más significativa.

Otros consejos

Además de lo que @Vadim dijo anteriormente, usar la afirmación adecuada puede proteger contra errores creados por cortar, copiar y pegar las pruebas.

Como ejemplo

assertTrue("Objects must not be the same", expected != actual);

Luego se copia y modifica a

assertTrue("Objects must not be the same", newobject == actual);

Cuando el código cambia y esta prueba falla y el comentario engaña al siguiente desarrollador para " corregir " El código de una manera que introduce un nuevo error.

Si el código de cortar, copiar, pegar fue algo como esto:

assertFalse("Objects must be the same", newobject == actual);

La falta de coherencia del comentario, la afirmación y el caso de prueba pueden ser más notorios.

Y sí, he visto que esto sucede.

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