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.