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


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>

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


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);

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 );   

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>

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

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


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

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.


0

Tu peux le mettre comme ça

  assertTrue("your fail message ",Long.parseLong(previousTokenValues[1]) > Long.parseLong(currentTokenValues[1]));
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.