web-dev-qa-db-fra.com

Comment affirmer plus que d'utiliser JUnit Assert?

J'ai ces valeurs provenant d'un test

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

et j'essaye

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

Je reçois le Java.lang.AssertionError et le detailMessage lors du débogage est null.

Comment puis-je affirmer plus que des conditions dans l'utilisation de JUnit

92
daydreamer

Juste comment vous l'avez fait. assertTrue(boolean) a également une surcharge assertTrue(String, boolean)String est le message en cas d’échec; vous pouvez l'utiliser si vous voulez imprimer que tel ou tel n'était pas plus grand qu'un tel et tel.

Vous pouvez également ajouter hamcrest-all en tant que dépendance pour utiliser des correspondants. Voir 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])));

Cela donne une erreur comme:

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

Lors de l'utilisation de JUnit, je fais toujours le message bien et clairement. Cela fait gagner un temps considérable au débogage. En procédant ainsi, vous éviterez de devoir ajouter une dépendance supplémentaire à 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);
14
Qwerky

vous pouvez aussi essayer ci-dessous simple soln:

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

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

Assert.assertTrue(prev  > curr );   
10
user3293666

Vous devriez ajouter Hamcrest-library à votre chemin de construction. Il contient le Matchers.class nécessaire qui a la méthode lessThan ().

Dépendance comme ci-dessous.

<dependency>
  <groupId>org.hamcrest</groupId>
  <artifactId>hamcrest-library</artifactId>
  <version>1.3</version>
  <scope>test</scope>
</dependency>
9
嘉恒陶
assertTrue("your message", previousTokenValues[1].compareTo(currentTokenValues[1]) > 0)

cela passe pour les valeurs précédentes> actuelles

1
DaveRlz

Vous pouvez le mettre comme ça

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

Si l'ajout d'une bibliothèque supplémentaire telle que hamcrest n'est pas souhaitable, la logique peut être implémentée comme méthode d'utilitaire à l'aide de la dépendance junit uniquement:

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 + ">");
    }
}
0
Andrey