2015-01-30 1 views
3

누구나 우리는 Junit의 새로운 assertThat을 사용해야한다고 말합니다.하지만 큰 Strings 비교에서는 기능이 부족한 것 같습니다.assertThat 대 큰 문자열 비교를위한 assertEquals

예 :

@Test 
public void testAssertThat() throws Exception { 
    Assert.assertThat("auiehaeiueahuiheauihaeuieahuiaehuieahuaiehiaueheauihaeuihaeuiaehuiaehuiaehuiaehaeuihaei", 
      CoreMatchers.equalTo("auiehaeiueahuiheauihaeuieahuiaehuieaheaiehiaueheauihaeuihaeuiaehuiaehuiaehuiaehaeuihaei")); 
} 

@Test 
public void testAssertEquals() throws Exception { 
    Assert.assertEquals("auiehaeiueahuiheauihaeuieahuiaehuieahuaiehiaueheauihaeuihaeuiaehuiaehuiaehuiaehaeuihaei", 
      "auiehaeiueahuiheauihaeuieahuiaehuieaheaiehiaueheauihaeuihaeuiaehuiaehuiaehuiaehaeuihaei"); 
} 

assertEquals 인쇄 쉽게 읽을 수있는 오류 메시지 :

org.junit.ComparisonFailure: expected:<...uihaeuieahuiaehuieah[u]aiehiaueheauihaeuiha...> but was:<...uihaeuieahuiaehuieah[e]aiehiaueheauihaeuiha...>

assertThat 동안 인쇄이 :

java.lang.AssertionError: Expected: "auiehaeiueahuiheauihaeuieahuiaehuieaheaiehiaueheauihaeuihaeuiaehuiaehuiaehuiaehaeuihaei" but: was "auiehaeiueahuiheauihaeuieahuiaehuieahuaiehiaueheauihaeuihaeuiaehuiaehuiaehuiaehaeuihaei"

가 같은 동작을 얻을 수있는 방법이 있나요을 assertThat?

+0

당신은''assertThat (실제, is (equalTo (expected)))''을 시도 했습니까? – user1438038

+0

네, 같은 문제가 있습니다. – caarlos0

+0

아마도 Groovy PowerAssert를 어떻게 든 사용할 수 있습니다. – Crazyjavahacking

답변

3

친숙한 메시지 org.junit.ComparisonFailure: expected...은 JUnit이 assertEquals 및 String을 입력으로 사용하는 방식이라는 사실에서 비롯된 것입니다. 문자열 비교가 실패하면 Junit은 org.junit.ComparisonFailure를 발생시킵니다.

IDE에서 비교가 실제로 더 읽기 쉽습니다. 예를 들어 Eclipse에서 실패한 Junit 테스트를 두 번 클릭하여 문자열 비교를 표시 할 수 있습니다. 이처럼

:

enter image description here

AssertThat 다른 의미를 가지고 있으며, javadoc에서는 명시 적으로 말한다 : Asserts that actual satisfies the condition specified by matcher. If not, an AssertionError is thrown with information about the matcher and failing value. 을 그리고 이름에서 알 수 있듯이, AssertionError를는 의미 넓은 있습니다.

결론 : String에 대한 친숙한 메시지를 유지하려면 String 비교를 위해 AssertEquals를 사용해야합니다.

관련 문제