Come affermare maggiore rispetto all'utilizzo di JUnit Assert?


118

Ho questi valori che provengono da un test

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

e ci provo

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

Ottengo il java.lang.AssertionErrore detailMessagesul debug è null.

Come posso affermare condizioni maggiori rispetto all'utilizzo JUnit


Pubblica anche l'intero codice con il messaggio di errore completo. Forse la tua dichiarazione di asserzione è prima dell'inizializzazione dell'array.
Josh M

Risposte:


153

Proprio come l'hai fatto. assertTrue(boolean)ha anche un sovraccarico in assertTrue(String, boolean)cui il fileString è il messaggio in caso di guasto; puoi usarlo se vuoi stampare che tale e tale non era maggiore di tal dei tali.

Puoi anche aggiungere hamcrest-allcome dipendenza per usare i matcher. Vedi 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])));

Questo dà un errore come:

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

3
Cordiali saluti, ecco il collegamento a OrderingComparisoncui contiene greaterThan: hamcrest.org/JavaHamcrest/javadoc/1.3/org/hamcrest/number/…
John B

7
<groupId>org.hamcrest</groupId>,<artifactId>hamcrest-all</artifactId>
gavenkoa

2
Nota che Hamcrest è incluso di default quando usi JUnit 4.11, quindi non è necessario cercare la dipendenza.
Chanoch


9
@ Chanoch ho junit 4.12 che dipende transitivamente da hamcrest-core 1.3. Non esiste un metodo maggiore di quello sulla classe org.hamcrest.CoreMatchers. Se aggiungo hamcrest-all 1.3 come dipendenza aggiuntiva, fornisce il metodo org.hamcrest.Matchers.guesdayThan.
Anthony Hayward

18

Quando uso JUnit afferma, rendo sempre il messaggio piacevole e chiaro. Risparmia enormi quantità di tempo nel debug. In questo modo si evita di dover aggiungere un'ulteriore dipendenza da 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);

Bella soluzione, davvero pulita.
Óscar Andreu

13

puoi anche provare di seguito semplice soln:

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

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

Assert.assertTrue(prev  > curr );   

9

Dovresti aggiungere la libreria Hamcrest al tuo percorso di build. Contiene il Matchers.class necessario che ha il metodo lessThan ().

Dipendenza come di seguito.

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

questo passa per i valori precedenti> correnti


1

In alternativa, se l'aggiunta di una libreria aggiuntiva come hamcrestnon è desiderabile, la logica può essere implementata come metodo di utilità utilizzando junitsolo la dipendenza:

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

Come riconosco, al momento, in JUnit, la sintassi è così:

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

Significa che la condizione è davanti al messaggio.


0

Puoi metterlo così

  assertTrue("your fail message ",Long.parseLong(previousTokenValues[1]) > Long.parseLong(currentTokenValues[1]));
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.