¿Cómo afirmar más que usando JUnit Assert?


118

Tengo estos valores provenientes de una prueba.

previousTokenValues[1] = "1378994409108"
currentTokenValues[1] = "1378994416509"

y lo intento

    // current timestamp is greater
    assertTrue(Long.parseLong(previousTokenValues[1]) > Long.parseLong(currentTokenValues[1]));

Obtengo el java.lang.AssertionErrory la detailMessagedepuración null.

¿Cómo puedo afirmar más que condiciones al usar JUnit


Publique también el código completo con el mensaje de error completo. Quizás su declaración de aserción esté antes de la inicialización de la matriz.
Josh M

Respuestas:


153

Cómo lo has hecho. assertTrue(boolean)también tiene una sobrecarga assertTrue(String, boolean)donde Stringes el mensaje en caso de falla; puede usar eso si desea imprimir que tal y tal no era más grande que tal y tal.

También puede agregar hamcrest-allcomo dependencia para usar comparadores. Consulte https://code.google.com/p/hamcrest/wiki/Tutorial :

import static org.hamcrest.MatcherAssert.assertThat;
import static org.hamcrest.Matchers.*;

assertThat("timestamp",
           Long.parseLong(previousTokenValues[1]),
           greaterThan(Long.parseLong(currentTokenValues[1])));

Eso da un error como:

java.lang.AssertionError: timestamp
Expected: a value greater than <456L>
     but: <123L> was less than <456L>

3
FYI, aquí está el enlace OrderingComparisonque contiene greaterThan: hamcrest.org/JavaHamcrest/javadoc/1.3/org/hamcrest/number/…
John B

7
<groupId>org.hamcrest</groupId>,<artifactId>hamcrest-all</artifactId>
gavenkoa

2
Tenga en cuenta que Hamcrest se incluye de forma predeterminada cuando usa JUnit 4.11, por lo que no es necesario buscar la dependencia.
Chanoch


9
@Chanoch Tengo junit 4.12 que depende transitivamente de hamcrest-core 1.3. No hay un método mayor que en la clase org.hamcrest.CoreMatchers. Si agrego hamcrest-all 1.3 como una dependencia adicional, proporciona el método org.hamcrest.Matchers.greaterThan.
Anthony Hayward

18

Cuando utilizo JUnit afirma, siempre hago que el mensaje sea agradable y claro. Ahorra una gran cantidad de tiempo en la depuración. Hacerlo de esta manera evita tener que agregar una dependencia adicional en hamcrest Matchers.

previousTokenValues[1] = "1378994409108";
currentTokenValues[1] = "1378994416509";

Long prev = Long.parseLong(previousTokenValues[1]);
Long curr = Long.parseLong(currentTokenValues[1]);
assertTrue("Previous (" + prev + ") should be greater than current (" + curr + ")", prev > curr);

Buena solución, realmente limpia.
Óscar Andreu

13

También puede probar a continuación una solución simple:

previousTokenValues[1] = "1378994409108";
currentTokenValues[1] = "1378994416509";

Long prev = Long.parseLong(previousTokenValues[1]);
Long curr = Long.parseLong(currentTokenValues[1]);

Assert.assertTrue(prev  > curr );   

9

Debe agregar Hamcrest-library a su Build Path. Contiene el Matchers.class necesario que tiene el método lessThan ().

Dependencia como se muestra a continuación.

<dependency>
  <groupId>org.hamcrest</groupId>
  <artifactId>hamcrest-library</artifactId>
  <version>1.3</version>
  <scope>test</scope>
</dependency>

2
assertTrue("your message", previousTokenValues[1].compareTo(currentTokenValues[1]) > 0)

esto pasa por valores anteriores> actuales


1

Alternativamente, si agregar una biblioteca adicional como hamcrestno es deseable, la lógica se puede implementar como método de utilidad usando junitsolo la dependencia:

public static void assertGreaterThan(int greater, int lesser) {
    assertGreaterThan(greater, lesser, null);
}

public static void assertGreaterThan(int greater, int lesser, String message) {
    if (greater <= lesser) {
        fail((StringUtils.isNotBlank(message) ? message + " ==> " : "") +
                "Expected: a value greater than <" + lesser + ">\n" +
                "But <" + greater + "> was " + (greater == lesser ? "equal to" : "less than") + " <" + lesser + ">");
    }
}

1

Como reconozco, en este momento, en JUnit, la sintaxis es así:

AssertTrue(Long.parseLong(previousTokenValues[1]) > Long.parseLong(currentTokenValues[1]), "your fail message ");

Significa que la condición está delante del mensaje.


0

Puedes ponerlo así

  assertTrue("your fail message ",Long.parseLong(previousTokenValues[1]) > Long.parseLong(currentTokenValues[1]));
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.