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


118

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

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

그리고 나는 시도

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

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

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


전체 오류 메시지와 함께 전체 코드를 게시하십시오. 아마도 당신은 어설 션 문이 배열 초기화 이전에 있습니다.
조쉬 M

답변:


153

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

3
참고로 여기에 포함 된 링크가 OrderingComparison있습니다 greaterThan. hamcrest.org/JavaHamcrest/javadoc/1.3/org/hamcrest/number/…
John B

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

2
Hamcrest는 JUnit 4.11을 사용할 때 기본적으로 포함되므로 종속성을 검색 할 필요가 없습니다.
Chanoch

3
hamcrest 및 junit 참조순서에 주의하십시오 .
돈 커크비

9
@Chanoch 나는 hamcrest-core 1.3에 전 이적으로 의존하는 junit 4.12를 가지고 있습니다. org.hamcrest.CoreMatchers 클래스에는 greaterThan 메소드가 없습니다. hamcrest-all 1.3을 추가 종속성으로 추가하면 org.hamcrest.Matchers.greaterThan 메서드를 제공합니다.
Anthony Hayward

18

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

좋은 솔루션, 정말 깨끗합니다.
Óscar Andreu 2018

13

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

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

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

Assert.assertTrue(prev  > curr );   

9

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

아래와 같이 종속성.

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

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


1

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

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

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

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


0

이렇게 넣을 수 있습니다

  assertTrue("your fail message ",Long.parseLong(previousTokenValues[1]) > Long.parseLong(currentTokenValues[1]));
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.