Comment affirmer plus que l'utilisation de JUnit Assert?

118

J'ai ces valeurs issues 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.AssertionErroret detailMessagesur le débogage est null.

Comment puis-je affirmer des conditions d'utilisation supérieures à JUnit

rêveur
la source
Publiez également le code complet avec le message d'erreur complet. Peut-être que votre déclaration d'assertion est avant l'initialisation du tableau.
Josh M le

Réponses:

153

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

Vous pouvez également ajouter hamcrest-allcomme dépendance pour utiliser des matchers. 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>
yshavit
la source
3
Pour info, voici le lien vers OrderingComparisonlequel contient greaterThan: hamcrest.org/JavaHamcrest/javadoc/1.3/org/hamcrest/number
John B
7
<groupId>org.hamcrest</groupId>,<artifactId>hamcrest-all</artifactId>
gavenkoa
2
Notez que Hamcrest est inclus par défaut lorsque vous utilisez JUnit 4.11 donc pas besoin de rechercher la dépendance.
Chanoch
3
Soyez prudent avec l' ordre des références hamcrest et junit .
Don Kirkby le
9
@Chanoch J'ai junit 4.12 qui dépend transitivement de hamcrest-core 1.3. Il n'y a pas de méthode HigherThan sur la classe org.hamcrest.CoreMatchers. Si j'ajoute hamcrest-all 1.3 comme dépendance supplémentaire, il fournit la méthode org.hamcrest.Matchers.greaterThan.
Anthony Hayward
18

Lorsque j'utilise les assertions JUnit, je rends toujours le message clair et clair. Cela économise énormément de temps au débogage. Faire cela de cette façon évite d'avoir à ajouter une dépendance supplémentaire sur 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
la source
Belle solution, vraiment propre.
Óscar Andreu
13

vous pouvez également essayer ci-dessous la solution simple:

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

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

Assert.assertTrue(prev  > curr );   
user3293666
la source
9

Vous devez 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>
嘉 恒 陶
la source
2
assertTrue("your message", previousTokenValues[1].compareTo(currentTokenValues[1]) > 0)

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

Dave Richardson
la source
1

Sinon, si l'ajout d'une bibliothèque supplémentaire hamcrestn'est pas souhaitable, la logique peut être implémentée en tant que méthode utilitaire en utilisant junituniquement la dépendance:

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 + ">");
    }
}
Andreï
la source
1

Comme je le reconnais, pour le moment, dans JUnit, la syntaxe est la suivante:

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

Cela signifie que la condition est devant le message.

Thanh Huy Le
la source
0

Tu peux le mettre comme ça

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