Как утверждать больше, чем с помощью 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

мечтатель
источник
Опубликуйте также весь код с полным сообщением об ошибке. Возможно, ваше утверждение находится перед инициализацией массива.
Josh M

Ответы:

153

Как ты это сделал. assertTrue(boolean)также имеет перегрузку, assertTrue(String, boolean)где Stringэто сообщение в случае сбоя; вы можете использовать это, если хотите напечатать, что такой-то не больше, чем такой-то.

Вы также можете добавить hamcrest-allзависимость для использования сопоставителей. См. 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>
yshavit
источник
3
К вашему сведению, вот ссылка, на 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, поэтому нет необходимости искать зависимость.
Chanoch
3
Будьте осторожны с порядком ссылок на hamcrest и junit .
Дон Киркби
9
@Chanoch У меня есть junit 4.12, который транзитивно зависит от hamcrest-core 1.3. В классе org.hamcrest.CoreMatchers нет метода больше чем. Если я добавлю hamcrest-all 1.3 в качестве дополнительной зависимости, он предоставит метод org.hamcrest.Matchers.greaterThan.
Энтони Хейворд,
18

При использовании утверждений JUnit я всегда делаю сообщение красивым и ясным. Это экономит огромное количество времени на отладку. Это позволяет избежать добавления дополнительной зависимости от 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);
Qwerky
источник
Хорошее решение, действительно чисто.
Óscar Andreu
13

вы также можете попробовать следующие простые решения:

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

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

Assert.assertTrue(prev  > curr );   
user3293666
источник
9

Вам следует добавить Hamcrest-библиотеку в свой путь сборки. Он содержит необходимый класс Matchers.class с методом lessThan ().

Зависимость, как показано ниже.

<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]));
blackbird014
источник