Làm thế nào để khẳng định lớn hơn sử dụng JUnit Assert?


117

Tôi có những giá trị này đến từ một bài kiểm tra

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

và tôi cố gắng

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

Tôi nhận được java.lang.AssertionErrordetailMessagetrên gỡ lỗi là null.

Làm thế nào tôi có thể khẳng định lớn hơn các điều kiện trong việc sử dụng JUnit


Đăng toàn bộ mã với thông báo lỗi hoàn chỉnh. Có lẽ câu lệnh khẳng định của bạn là trước khi khởi tạo mảng.
Josh M

Câu trả lời:


153

Làm thế nào bạn đã làm điều đó. assertTrue(boolean)cũng có một sự quá tải assertTrue(String, boolean)trong đó Stringlà thông báo trong trường hợp thất bại; bạn có thể sử dụng nó nếu bạn muốn in cái đó và cái đó không lớn hơn cái kia.

Bạn cũng có thể thêm hamcrest-allnhư một phụ thuộc để sử dụng các công cụ đối sánh. Xem https://code.google.com.vn/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])));

Điều đó đưa ra một lỗi như:

java.lang.AssertionError: timestamp
Expected: a value greater than <456L>
     but: <123L> was less than <456L>

3
FYI, đây là liên kết OrderingComparisoncó chứa greaterThan: hamcrest.org/Java Hamcrest / javadoc / .3 / org / muscrest / number / trộm
John B

7
<groupId>org.hamcrest</groupId>,<artifactId>hamcrest-all</artifactId>
gavenkoa

2
Lưu ý rằng Hamcrest được bao gồm theo mặc định khi bạn sử dụng JUnit 4.11 nên không cần tìm kiếm phụ thuộc.
Chanoch


9
@Chanoch Tôi có Junit 4.12, phụ thuộc quá mức vào hamcrest-core 1.3. Không có phương thức lớn hơn trên lớp org.hamcrest.CoreMatchers. Nếu tôi thêm hamcrest-all 1.3 như một phụ thuộc bổ sung, nó cung cấp phương thức org.hamcrest.Matchers.g [Than.
Anthony Hayward

18

Khi sử dụng các xác nhận JUnit, tôi luôn làm cho thông điệp tốt đẹp và rõ ràng. Nó tiết kiệm số lượng lớn thời gian gỡ lỗi. Làm theo cách này để tránh phải thêm một phụ thuộc vào Bộ so khớp 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);

Giải pháp đẹp, thực sự sạch sẽ.
Óscar Andreu

13

bạn cũng có thể thử dưới đây đơn giản:

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

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

Assert.assertTrue(prev  > curr );   

9

Bạn nên thêm thư viện Hamcrest vào Đường dẫn xây dựng của mình. Nó chứa Matchers. Class cần thiết có phương thức lessThan ().

Phụ thuộc như dưới đây.

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

giá trị này vượt qua cho các giá trị hiện tại trước đó


1

Ngoài ra, nếu thêm thư viện bổ sung như hamcrestkhông mong muốn, logic có thể được triển khai dưới dạng phương thức tiện ích junitchỉ sử dụng phụ thuộc:

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

Như tôi nhận ra, hiện tại, trong JUnit, cú pháp giống như thế này:

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

Có nghĩa là, điều kiện là ở phía trước của tin nhắn.


0

Bạn có thể đặt nó như thế này

  assertTrue("your fail message ",Long.parseLong(previousTokenValues[1]) > Long.parseLong(currentTokenValues[1]));
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.