Como afirmar maior do que usar JUnit Assert?

117

Eu tenho esses valores vindo de um teste

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

e eu tento

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

Eu entendo java.lang.AssertionErrore detailMessagena depuração null.

Como posso afirmar condições superiores ao uso JUnit

sonhador
fonte
Poste o código inteiro também com a mensagem de erro completa. Talvez sua declaração de asserção esteja antes da inicialização do array.
Josh M

Respostas:

153

Exatamente como você fez. assertTrue(boolean)também tem uma sobrecarga assertTrue(String, boolean)onde Stringé a mensagem em caso de falha; você pode usar isso se quiser imprimir que tal e tal não era maior do que fulano.

Você também pode adicionar hamcrest-allcomo uma dependência para usar matchers. Consulte 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])));

Isso dá um erro como:

java.lang.AssertionError: timestamp
Expected: a value greater than <456L>
     but: <123L> was less than <456L>
Yshavit
fonte
3
Para sua informação, aqui está o link OrderingComparisonque contém greaterThan: hamcrest.org/JavaHamcrest/javadoc/1.3/org/hamcrest/number/…
John B
7
<groupId>org.hamcrest</groupId>,<artifactId>hamcrest-all</artifactId>
gavenkoa
2
Observe que o Hamcrest é incluído por padrão quando você usa o JUnit 4.11, portanto, não há necessidade de pesquisar a dependência.
Chanoch,
3
Tenha cuidado com a ordem das referências hamcrest e junit .
Don Kirkby
9
@Chanoch eu tenho o junit 4.12 que depende transitivamente do hamcrest-core 1.3. Não há método maior do que na classe org.hamcrest.CoreMatchers. Se eu adicionar hamcrest-all 1.3 como uma dependência adicional, ele fornece o método org.hamcrest.Matchers.greaterThan.
Anthony Hayward
18

Ao usar declarações JUnit, sempre deixo a mensagem boa e clara. Ele economiza muito tempo na depuração. Fazer isso dessa forma evita ter que adicionar uma dependência adicional aos Matchers do hamcrest.

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
fonte
Boa solução, realmente limpa.
Óscar Andreu
13

você também pode tentar a solução simples abaixo:

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

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

Assert.assertTrue(prev  > curr );   
user3293666
fonte
9

Você deve adicionar a biblioteca Hamcrest ao seu caminho de construção. Ele contém o Matchers.class necessário que possui o método lessThan ().

Dependência conforme abaixo.

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

isso passa para valores anteriores> atuais

Dave Richardson
fonte
1

Alternativamente, se adicionar uma biblioteca extra, como hamcrestnão é desejável, a lógica pode ser implementada como método utilitário usando junitapenas dependência:

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

Como eu reconheço, no momento, em JUnit, a sintaxe é assim:

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

Significa isso, a condição está na frente da mensagem.

Thanh Huy Le
fonte
0

Você pode colocar assim

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