Bagaimana cara menegaskan lebih baik daripada menggunakan JUnit Assert?

118

Saya memiliki nilai-nilai ini yang berasal dari ujian

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

dan saya mencoba

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

Saya mendapatkan java.lang.AssertionErrordan detailMessagedebugging adalah null.

Bagaimana saya bisa menegaskan lebih dari kondisi dalam menggunakan JUnit

pelamun
sumber
Posting seluruh kode juga dengan pesan kesalahan lengkap. Mungkin pernyataan pernyataan Anda sebelum inisialisasi array.
Josh M

Jawaban:

153

Bagaimana Anda melakukannya. assertTrue(boolean)juga memiliki kelebihan di assertTrue(String, boolean)manaString pesannya jika terjadi kegagalan; Anda dapat menggunakannya jika Anda ingin mencetak bahwa ini-dan-itu tidak lebih besar dari ini-dan-itu.

Anda juga bisa menambahkan hamcrest-allsebagai dependensi untuk menggunakan matcher. Lihat 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])));

Itu memberikan kesalahan seperti:

java.lang.AssertionError: timestamp
Expected: a value greater than <456L>
     but: <123L> was less than <456L>
yshavit
sumber
3
FYI, ini tautan OrderingComparisonyang berisi greaterThan: hamcrest.org/JavaHamcrest/javadoc/1.3/org/hamcrest/number/…
John B
7
<groupId>org.hamcrest</groupId>,<artifactId>hamcrest-all</artifactId>
gavenkoa
2
Perhatikan bahwa Hamcrest disertakan secara default saat Anda menggunakan JUnit 4.11 jadi tidak perlu mencari dependensi.
Chanoch
3
Hati-hati dengan urutan referensi hamcrest dan junit .
Don Kirkby
9
@Chanoch Saya memiliki junit 4.12 yang secara transitif bergantung pada hamcrest-core 1.3. Tidak ada metode GreaterThan pada kelas org.hamcrest.CoreMatchers. Jika saya menambahkan hamcrest-all 1.3 sebagai dependensi tambahan, ini menyediakan metode org.hamcrest.Matchers.greaterThan.
Anthony Hayward
18

Saat menggunakan JUnit menegaskan, saya selalu membuat pesannya bagus dan jelas. Ini menghemat banyak waktu debugging. Melakukannya dengan cara ini menghindari keharusan menambahkan ketergantungan tambahan pada Pencocok 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);
Qwerky
sumber
Solusi bagus, bersih banget.
Óscar Andreu
13

Anda juga dapat mencoba soln sederhana di bawah ini:

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

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

Assert.assertTrue(prev  > curr );   
pengguna3293666
sumber
9

Anda harus menambahkan Hamcrest-library ke Build Path Anda. Ini berisi Matchers.class yang dibutuhkan yang memiliki metode lessThan ().

Ketergantungan seperti di bawah ini.

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

ini berlaku untuk nilai sebelumnya> saat ini

Dave Richardson
sumber
1

Alternatifnya jika menambahkan pustaka tambahan seperti hamcresttidak diinginkan, logika dapat diimplementasikan sebagai metode utilitas junithanya dengan menggunakan ketergantungan:

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 + ">");
    }
}
Andrey
sumber
1

Seperti yang saya ketahui, saat ini, di JUnit, sintaksnya seperti ini:

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

Berarti, kondisinya ada di depan pesan.

Thanh Huy Le
sumber
0

Anda bisa meletakkannya seperti ini

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