[java] JUnit Assert를 사용하는 것보다 더 큰 것을 주장하는 방법은 무엇입니까?

이 값은 테스트에서 비롯됩니다.

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

그리고 나는 시도

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

나는를 얻을 수 java.lang.AssertionErrordetailMessage디버깅이에 null.

사용 조건보다 더 큰 것을 어떻게 주장 할 수 있습니까? JUnit



답변

당신이 그것을 한 방법. 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>


답변

JUnit 어설 션을 사용할 때 항상 메시지를 멋지고 명확하게 만듭니다. 디버깅 시간을 크게 절약 할 수 있습니다. 이렇게하면 hamcrest Matchers에 대한 추가 종속성을 추가 할 필요가 없습니다.

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


답변

아래 간단한 해결책을 시도해 볼 수도 있습니다.

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

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

Assert.assertTrue(prev  > curr );   


답변

빌드 경로에 Hamcrest-library를 추가해야합니다. lessThan () 메서드가있는 필요한 Matchers.class가 포함되어 있습니다.

아래와 같이 종속성.

<dependency>
  <groupId>org.hamcrest</groupId>
  <artifactId>hamcrest-library</artifactId>
  <version>1.3</version>
  <scope>test</scope>
</dependency>


답변

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

이것은 이전> 현재 값에 전달됩니다.


답변

또는과 같은 추가 라이브러리를 추가하는 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 + ">");
    }
}


답변

내가 알다시피, 현재 JUnit에서 구문은 다음과 같습니다.

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

즉, 조건이 메시지 앞에 있습니다.