¿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

soñador
fuente
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>
yshavit
fuente
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
3
Tenga cuidado con el orden de las referencias hamcrest y junit .
Don Kirkby
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);
Qwerky
fuente
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 );   
user3293666
fuente
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>
嘉 恒 陶
fuente
2
assertTrue("your message", previousTokenValues[1].compareTo(currentTokenValues[1]) > 0)

esto pasa por valores anteriores> actuales

Dave Richardson
fuente
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 + ">");
    }
}
Andrey
fuente
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.

Thanh Huy Le
fuente
0

Puedes ponerlo así

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