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

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


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

Хорошее решение, действительно чисто.
Ó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 );   

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]));
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.