如何断言比使用JUnit声明更大?


117

我有这些值来自测试

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

我尝试

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

我得到了java.lang.AssertionErrordetailMessage关于调试是null

我如何在使用中断言比条件更大 JUnit


发布完整的代码以及完整的错误消息。也许您在声明断言之前是在数组初始化之前。
乔什M

Answers:


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以下内容
John B

7
<groupId>org.hamcrest</groupId><artifactId>hamcrest-all</artifactId>
Givenkoa

2
注意,当您使用JUnit 4.11时,默认情况下会包含Hamcrest。因此,无需搜索依赖项。
Chanoch 2014年


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

不错的解决方案,真的很干净。
奥斯卡·安德鲁

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-library添加到构建路径。它包含具有lessThan()方法的所需Matchers.class。

依赖关系如下。

<dependency>
  <groupId>org.hamcrest</groupId>
  <artifactId>hamcrest-library</artifactId>
  <version>1.3</version>
  <scope>test</scope>
</dependency>


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]));
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.