Java/ JUnit – AssertTrue vs AssertFalse

5 minutos de lectura

Avatar de usuario de Thomas
Tomás

Soy bastante nuevo en Java y estoy siguiendo el Tutoriales para principiantes de Eclipse Total. Todos son muy útiles, pero en la Lección 12, usa assertTrue para un caso de prueba y assertFalse Por otro. Aquí está el código:

// Check the book out to p1 (Thomas)
// Check to see that the book was successfully checked out to p1 (Thomas)
assertTrue("Book did not check out correctly", ml.checkOut(b1, p1));    // If checkOut fails, display message
assertEquals("Thomas", b1.getPerson().getName());

assertFalse("Book was already checked out", ml.checkOut(b1,p2));        // If checkOut fails, display message
assertEquals("Book was already checked out", m1.checkOut(b1,p2));

He buscado buena documentación sobre estos métodos, pero no he encontrado nada. Si mi entendimiento es correcto, assertTrue tanto como assertFalse muestra la cadena cuando el segundo parámetro se evalúa como falso. Si es así, ¿cuál es el punto de tener ambos?

Editar: creo que veo lo que me estaba confundiendo. Es posible que el autor los haya incluido a ambos solo para mostrar su funcionalidad (después de todo, ES un tutorial). Y configuró uno que fallaría, para que el mensaje se imprimiera y me dijera POR QUÉ falló. Empezando a tener más sentido… Creo que esa es la explicación, pero no estoy seguro.

  • Guau… Me acabo de dar cuenta de que si paso el cursor sobre un método en Eclipse, me dará información sobre él. ¡Gracias a todos por sus respuestas!

    – Tomás

    13 de julio de 2010 a las 20:41

  • Aprenda AssertJ -> assertj.org

    – MariuszS

    15/04/2015 a las 20:11

assertTrue fallará si el segundo parámetro se evalúa como false (en otras palabras, asegura que el valor es verdadero). assertFalse hace lo contrario.

assertTrue("This will succeed.", true);
assertTrue("This will fail!", false);

assertFalse("This will succeed.", false);
assertFalse("This will fail!", true);

Como con muchas otras cosas, la mejor manera de familiarizarse con estos métodos es experimentar :-).

  • assert se puede explicar como must be. Así se puede explicar la afirmación assertTrue("~", expression); a la expresión debe ser verdadera.

    – Alston

    24 de septiembre de 2014 a las 8:18


  • en realidad el mejor forma es leer el javadoc es mejor que experimentando y adivinación siempre.

    usuario177800

    09/04/2016 a las 21:21

Tu interpretación es incorrecta, en casos como estos consulta siempre al JavaDoc.

afirmarfalso

public static void assertFalse(java.lang.String message,
                               boolean condition)

Afirma que una condición es falsa. Si no es así, arroja un AssertionError con el mensaje dado.

Parámetros:

  • message – el mensaje de identificación para el AssertionError (null okay)
  • condition – condición a comprobar

Avatar de usuario de Xetius
Xecio

El punto es la semántica. En assertTrue, está afirmando que la expresión es verdadera. Si no es así, mostrará el mensaje y la afirmación fallará. En assertFalse, está afirmando que una expresión se evalúa como falsa. Si no es así, se muestra el mensaje y la aserción falla.

assertTrue (message, value == false) == assertFalse (message, value);

Estos son funcionalmente iguales, pero si espera que un valor sea falso entonces usa assertFalse. Si espera que un valor sea verdaderoluego usa assertTrue.

  • Gracias. Creo que lo entiendo. En la afirmación Falso, ¿debería decir “valor == verdadero”?

    – Tomás

    13 de julio de 2010 a las 20:36

Creo que es solo para su conveniencia (y los lectores de su código)

Su código y sus pruebas unitarias deberían ser idealmente autodocumentados, con lo que ayuda esta API,

Piensa en lo que es más claro de leer:

AssertTrue(!(a > 3));

o

AssertFalse(a > 3);

Cuando abre sus pruebas después de xx meses cuando sus pruebas fallan repentinamente, le tomaría mucho menos tiempo comprender qué salió mal en el segundo caso (mi opinión). Si no está de acuerdo, siempre puede seguir con AssertTrue para todos los casos 🙂

Su primera reacción a estos métodos es bastante interesante para mí. Lo usaré en argumentos futuros que afirman Verdadero y Falso no son las herramientas más amigables. si usaras

assertThat(thisOrThat, is(false));

es mucho más legible y también imprime un mejor mensaje de error.

  • ¡Gracias por el consejo! Solo estoy siguiendo un tutorial, aunque lol.

    – Tomás

    15 de julio de 2010 a las 13:27

avatar de usuario de bashflyng
bashvolar

assertTrue fallará si el valor verificado es falso, y assertFalse hará lo contrario: fallará si el valor verificado es verdadero.

Otra cosa, es muy probable que su último assertEquals falle, ya que comparará la cadena “El libro ya se desprotegió” con la salida de m1.checkOut (b1, p2). Necesita un tercer parámetro (el segundo valor para verificar la igualdad).

  • ¡Gracias por el consejo! Solo estoy siguiendo un tutorial, aunque lol.

    – Tomás

    15 de julio de 2010 a las 13:27

Avatar de usuario de Ronald Mos
ronald mos

El curso contiene un error lógico:

    assertTrue("Book check in failed", ml.checkIn(b1));

    assertFalse("Book was aleready checked in", ml.checkIn(b1));

En la primera aserción, esperamos que el checkIn devuelva True (porque el checkin fue exitoso). Si esto fallara, imprimiríamos un mensaje como “Error en el registro del libro. Ahora, en la segunda aserción, esperamos que el registro falle, porque el libro ya se registró en la primera línea. Por lo tanto, esperamos que el registro devuelva un Falso. Si por alguna razón el registro devuelve un Verdadero (que no esperamos), entonces el mensaje nunca debería ser “El libro ya se registró”, porque el registro fue exitoso.

¿Ha sido útil esta solución?