true library fail asserttrue java junit assert junit4 assertions

library - Java/JUnit-AssertTrue versus AssertFalse



asserttrue selenium (7)

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

Su código y las pruebas de su unidad deberían ser idealmente auto documentadas con las que ayuda esta API,

Piense en lo que es más claro para leer:

AssertTrue(!(a > 3));

o

AssertFalse(a > 3);

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

Soy bastante nuevo en Java y estoy siguiendo los Tutoriales de Eclipse Total Beginner . Todos son muy útiles, pero en la Lección 12, usa assertTrue para un caso de prueba y assertFalse para 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 una buena documentación sobre estos métodos, pero no he encontrado nada. Si mi comprensión es correcta, assertTrue y assertFalse muestran la cadena cuando el segundo parámetro se evalúa como falso. Si es así, ¿qué sentido tiene tenerlos a ambos?

Editar: Creo que veo lo que me estaba confundiendo. El autor puede haber puesto ambos para mostrar su funcionalidad (después de todo, es un tutorial). Y creó uno que fracasarí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.


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 afirmación esperamos que el checkIn sea verdadero (porque checkin es exitoso). Si esto falla, imprimimos un mensaje como "Falló el registro de libros". Ahora, en la segunda afirmación, esperamos que el check-in falle, porque el libro ya se registró en la primera línea. Por lo tanto, esperamos que un check-in genere un False. Si, por algún motivo, checkin devuelve un valor True (que no esperamos), el mensaje nunca debería ser "El libro ya estaba registrado" porque el registro fue exitoso.


El punto es semántica. En assertTrue, afirmas 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 afirmación falla.

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

Estos son funcionalmente iguales, pero si esperas que un valor sea falso , utiliza assertFalse . Si espera que un valor sea verdadero , entonces use assertTrue .


Su comprensión es incorrecta, en casos como estos siempre consulte JavaDoc .

assertFalse

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

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

Parámetros:

  • message - el mensaje de identificación para el AssertionError (nulo está bien)
  • condition - condición que debe verificarse

Tu primera reacción a estos métodos me resulta bastante interesante. Lo usaré en argumentos futuros que tanto assertTrue como assertFalse no son las herramientas más amigables. Si usaras

assertThat(thisOrThat, is(false));

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


assertTrue fallará si el segundo parámetro se evalúa como false (en otras palabras, asegura que el valor sea 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 simplemente experimentar :-).


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

Otra cosa, su última assertEquals probablemente fallará, ya que comparará la cadena "El libro ya estaba desprotegido" con la salida de m1.checkOut (b1, p2). Necesita un tercer parámetro (el segundo valor para verificar la igualdad).