Як стверджувати більше, ніж використовувати JUnit Assert?


118

У мене ці значення виходять із тесту

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

і я намагаюся

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

Я отримую java.lang.AssertionErrorі detailMessageналагодження є null.

Як я можу стверджувати, що більше, ніж умови використання JUnit


Опублікуйте весь код, а також повне повідомлення про помилку. Можливо, ви твердження твердження перед ініціалізацією масиву.
Джош М

Відповіді:


153

Тільки як ви це зробили. assertTrue(boolean)також є перевантаження, assertTrue(String, boolean)де Stringє повідомлення у разі відмови; ви можете використовувати це, якщо хочете надрукувати, що таке-і-таке було не більше, ніж так-то.

Ви також можете додати hamcrest-allяк залежність використання matchers. Дивіться 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])));

Це дає помилку типу:

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

3
FYI, ось посилання на OrderingComparisonяке містить greaterThan: hamcrest.org/JavaHamcrest/javadoc/1.3/org/hamcrest/number/…
Джон Б

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

2
Зауважте, що Hamcrest включений за замовчуванням, коли ви використовуєте JUnit 4.11, тому не потрібно шукати залежність.
Чаноч


9
@Chanoch У мене червень 4.12, що залежить від ядра 1.3. Не існує більшого методу, ніж у класі org.hamcrest.CoreMatchers. Якщо я додаю hamcrest-all 1.3 як додаткову залежність, це забезпечує метод org.hamcrest.Matchers.greaterThan.
Ентоні Хейвард

18

Використовуючи твердження JUnit, я завжди роблю це повідомлення приємним та зрозумілим. Це економить величезну кількість часу налагодження. Це робиться таким чином, щоб уникнути необхідності додавати додаткову залежність від сімейних матчів.

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

Приємне рішення, дійсно чисте.
Óscar Andreu

13

ви також можете спробувати нижче простий soln:

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

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

Assert.assertTrue(prev  > curr );   

9

Ви повинні додати бібліотеку Hamcrest до свого Build Path. Він містить необхідний Matchers.class, який має метод меншеThan ().

Залежність, як показано нижче.

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

це передається для попередніх> поточних значень


1

Крім того, якщо додавати додаткову бібліотеку, таку як hamcrestнебажано, логіка може бути реалізована як корисний метод, використовуючи junitлише залежність:

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

Як я визнаю, на даний момент у JUnit синтаксис такий:

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

Це означає, що умова знаходиться перед повідомленням.


0

Ви можете поставити так

  assertTrue("your fail message ",Long.parseLong(previousTokenValues[1]) > Long.parseLong(currentTokenValues[1]));
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.