web-dev-qa-db-ja.com

JUnit Assertを使用するよりも優れたアサート方法

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

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

そして私は試してみる

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

デバッグ時にJava.lang.AssertionErrorを取得し、detailMessagenullです。

JUnitを使用して条件よりも大きいことをアサートするにはどうすればよいですか

99
daydreamer

ちょうどあなたがそれをやった方法。 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>
134
yshavit

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

以下の簡単なsolnを試すこともできます。

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

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

Assert.assertTrue(prev  > curr );   
12
user3293666

Hamcrest-libraryをビルドパスに追加する必要があります。これには、lessThan()メソッドを持つ必要なMatchers.classが含まれています。

以下のような依存関係。

<dependency>
  <groupId>org.hamcrest</groupId>
  <artifactId>hamcrest-library</artifactId>
  <version>1.3</version>
  <scope>test</scope>
</dependency>
9
嘉恒陶
assertTrue("your message", previousTokenValues[1].compareTo(currentTokenValues[1]) > 0)

これは前の>現在の値に合格します

1
DaveRlz

または、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
Andrey

このように置くことができます

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