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


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>

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


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

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

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>

2
assertTrue("your message", previousTokenValues[1].compareTo(currentTokenValues[1]) > 0)

ini berlaku untuk nilai sebelumnya> saat ini


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

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.


0

Anda bisa meletakkannya seperti ini

  assertTrue("your fail message ",Long.parseLong(previousTokenValues[1]) > Long.parseLong(currentTokenValues[1]));
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.