【问题标题】:How to assert greater than using JUnit Assert?如何断言大于使用 JUnit Assert?
【发布时间】:2013-09-12 13:53:43
【问题描述】:

我有这些值来自测试

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

我试试

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

我在调试时得到的java.lang.AssertionErrordetailMessagenull

如何在使用JUnit时断言大于条件

【问题讨论】:

  • 发布整个代码以及完整的错误消息。也许你的断言语句是在数组初始化之前。

标签: java junit


【解决方案1】:

你是怎么做到的。 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>

【讨论】:

  • 仅供参考,这里是指向OrderingComparison 的链接,其中包含greaterThanhamcrest.org/JavaHamcrest/javadoc/1.3/org/hamcrest/number/…
  • &lt;groupId&gt;org.hamcrest&lt;/groupId&gt;, &lt;artifactId&gt;hamcrest-all&lt;/artifactId&gt;
  • 请注意,使用 JUnit 4.11 时默认包含 Hamcrest,因此无需搜索依赖项。
  • @Chanoch 我有 junit 4.12,它传递地依赖于 hamcrest-core 1.3。 org.hamcrest.CoreMatchers 类上没有 greaterThan 方法。如果我添加 hamcrest-all 1.3 作为附加依赖项,它会提供 org.hamcrest.Matchers.greaterThan 方法。
【解决方案2】:

当使用 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);

【讨论】:

  • 不错的解决方案,真的很干净。
【解决方案3】:

您也可以尝试以下简单的解决方案:

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

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

Assert.assertTrue(prev  > curr );   

【讨论】:

    【解决方案4】:

    您应该将 Hamcrest-library 添加到您的构建路径中。它包含所需的具有 lessThan() 方法的 Matchers.class。

    依赖如下。

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

    【讨论】:

      【解决方案5】:

      或者,如果不希望添加额外的库,例如 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 + ">");
          }
      }
      

      【讨论】:

        【解决方案6】:
        assertTrue("your message", previousTokenValues[1].compareTo(currentTokenValues[1]) > 0)
        

        这传递了以前的>当前值

        【讨论】:

          【解决方案7】:

          据我所知,目前在 JUnit 中,语法是这样的:

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

          表示条件在消息前面。

          【讨论】:

            【解决方案8】:

            你可以这样写

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

            【讨论】:

              猜你喜欢
              • 2011-11-12
              • 1970-01-01
              • 1970-01-01
              • 2021-11-08
              • 1970-01-01
              • 2017-03-09
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多