JUnitアサートを使用するよりもアサートする方法?


117

私はこれらの値をテストから得ています

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次のとおり
John B

7
<groupId>org.hamcrest</groupId><artifactId>hamcrest-all</artifactId>
ギヴェンコア2014年

2
JUnit 4.11を使用する場合、Hamcrestはデフォルトで含まれているため、依存関係を検索する必要はありません。
Chanoch 14


9
@Chanoch私はhamcrest-core 1.3に推移的に依存するjunit 4.12を持っています。org.hamcrest.CoreMatchersクラスにgreatThanメソッドはありません。追加の依存関係としてhamcrest-all 1.3を追加すると、org.hamcrest.Matchers.greaterThanメソッドが提供されます。
Anthony Hayward

18

JUnitアサートを使用するときは、メッセージを常にわかりやすく明確にします。デバッグ時間を大幅に節約できます。このようにすることで、hamcrestマッチャーに依存関係を追加する必要がなくなります。

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

以下の簡単な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-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]));
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.