it-swarm.com.de

Wie kann man mehr behaupten als mit JUnit Assert?

Ich habe diese Werte aus einem Test

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

und ich versuche es

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

Ich bekomme die Java.lang.AssertionError und detailMessage beim Debuggen null.

Wie kann ich bei der Verwendung von JUnit mehr als Bedingungen geltend machen?

92
daydreamer

So wie du es gemacht hast. assertTrue(boolean) hat auch eine Überladung assertTrue(String, boolean) wobei die String die Meldung ist, falls ein Fehler auftritt; Sie können das verwenden, wenn Sie drucken möchten, dass das und das nicht größer als das und so ist.

Sie können auch hamcrest-all als Abhängigkeit hinzufügen, um Matcher zu verwenden. Siehe 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])));

Das gibt einen Fehler wie:

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

Wenn ich JUnit-Asserts verwende, mache ich die Nachricht immer schön und klar. Das spart viel Zeit beim Debuggen. Wenn Sie dies auf diese Weise tun, müssen Sie keine zusätzliche Abhängigkeit von Hamcrest-Matchern hinzufügen.

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

sie können auch die einfache Lösung ausprobieren:

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

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

Assert.assertTrue(prev  > curr );   
10
user3293666

Sie sollten die Hamcrest-Bibliothek zu Ihrem Erstellungspfad hinzufügen. Es enthält die benötigte Matchers.class, die die Methode lessThan () hat.

Abhängigkeit wie unten.

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

dies gilt für vorherige> aktuelle Werte

1
DaveRlz

Sie können es so sagen

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

Wenn das Hinzufügen einer zusätzlichen Bibliothek wie hamcrest nicht wünschenswert ist, kann die Logik alternativ als Dienstprogrammmethode implementiert werden, die nur junit-Abhängigkeit verwendet:

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