Wie kann man mehr behaupten als mit JUnit Assert?


117

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 das java.lang.AssertionErrorund detailMessagebeim Debuggen ist null.

Wie kann ich bei der Verwendung mehr als die Bedingungen behaupten? JUnit


Veröffentlichen Sie auch den gesamten Code mit der vollständigen Fehlermeldung. Möglicherweise befindet sich Ihre Assertion-Anweisung vor der Array-Initialisierung.
Josh M

Antworten:


153

Wie du es gemacht hast. assertTrue(boolean)hat auch eine Überlastung, assertTrue(String, boolean)bei der Stringdie Meldung im Fehlerfall angezeigt wird; Sie können das verwenden, wenn Sie drucken möchten, dass das und das nicht größer als das und das war.

Sie können auch hamcrest-allals 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>

3
Zu Ihrer Information , hier ist der Link, OrderingComparisonder enthält greaterThan: hamcrest.org/JavaHamcrest/javadoc/1.3/org/hamcrest/number/…
John B

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

2
Beachten Sie, dass Hamcrest standardmäßig enthalten ist, wenn Sie JUnit 4.11 verwenden, sodass Sie nicht nach der Abhängigkeit suchen müssen.
Chanoch

3
Seien Sie vorsichtig mit der Reihenfolge der Hamcrest- und Junit-Referenzen .
Don Kirkby

9
@Chanoch Ich habe Junit 4.12, der transitiv von Hamcrest-Core 1.3 abhängt. Es gibt keine GreaterThan-Methode für die Klasse org.hamcrest.CoreMatchers. Wenn ich hamcrest-all 1.3 als zusätzliche Abhängigkeit hinzufüge, wird die Methode org.hamcrest.Matchers.greaterThan bereitgestellt.
Anthony Hayward

18

Wenn ich JUnit Asserts verwende, mache ich die Nachricht immer schön und klar. Dies spart enorm viel Zeit beim Debuggen. Auf diese Weise wird vermieden, dass eine zusätzliche Abhängigkeit von Hamcrest-Matchern hinzugefügt werden muss.

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

Schöne Lösung, sehr sauber.
Óscar Andreu

13

Sie können auch unten einfache Lösung versuchen:

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

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

Assert.assertTrue(prev  > curr );   

9

Sie sollten Ihrem Build-Pfad die Hamcrest-Bibliothek hinzufügen. Es enthält die benötigte Matchers.class mit der lessThan () -Methode.

Abhängigkeit wie unten.

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

Dies gilt für vorherige> aktuelle Werte


1

Wenn alternativ eine zusätzliche Bibliothek hinzugefügt werden kann, wie dies hamcrestnicht wünschenswert ist, kann die Logik als Dienstprogrammmethode junitnur unter Verwendung der Abhängigkeit implementiert werden :

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

Wie ich im Moment in JUnit erkenne, lautet die Syntax wie folgt:

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

Bedeutet, dass die Bedingung vor der Nachricht steht.


0

Sie können es so ausdrücken

  assertTrue("your fail message ",Long.parseLong(previousTokenValues[1]) > Long.parseLong(currentTokenValues[1]));
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.