2013-05-13 2 views
6

내가 테스트 보고서를 생성 할 때 내가 얻을, 두 개의 숫자JUnit assertEquals를 사용하는 사용자 정의 예외 메시지? 내가 어설 사용하고

다음
Assert.assertEquals("My error message", First , Second); 

을 비교하는 동일

" (처음으로) 예상 나의 오류 메시지 했다 (두 번째) "

기울임 꼴로 입력 한 부품을 어떻게 사용자 정의 할 수 있습니까? 숫자의 형식은?

+0

자바를 사용하고 있다고 가정했습니다. 스칼라면 그에 따라 태그를 조정하십시오. –

답변

5

메시지는 Assert 클래스에 하드 코딩되어 있습니다. 당신은 사용자 정의 메시지를 생산하기 위해 자신의 코드를 작성해야합니다 :

if (!first.equals(second)) { 
    throw new AssertionFailedError(
     String.format("bespoke message here", first, second)); 
} 

(참고 : 위의 대략적인 예이다 - 당신은 얼마나보고 등을 널 (null) Assert.java의 코드를 참조를 확인하는 것이 좋습니다 끝난). 당신의 대답에

int a=1, b=2; 
String str = "Failure: I was expecting %d to be equal to %d"; 
assertTrue(String.format(str, a, b), a == b); 
7

이 같은 것을 사용할 수 있습니다 같은 이름으로 내 프로젝트에서 새로운 클래스를 만들 수 있습니다. 포맷을 변경하는 것입니다. 맞습니까? 또는 클래스의 형식을 변경할 수 있으며 throw되는 Exception에 영향을 미칩니 까?

+1

이렇게해도 상황이 개선되지는 않습니다. OP는 이미 오류 메시지를 추가하는 방법을 알고 있지만 목표는 이탤릭체로 파트의 표현을 변경하는 것입니다. 귀하의 솔루션에는 여전히 그 문구가 그대로 유지됩니다. –

+0

정말입니까? 이클립스에서 (2,1)을 실행하면 "실패 : 2가 1과 같을 것으로 기대했다"가 아니라 "예상되는 ...이 ..."부분이된다 ... – Salem

+1

@Salem 왜냐하면 당신은 assert를 사용하고 있기 때문이다. not assertEquals – kryger

0

덕분에 나는 어설 클래스 내가 JUnit을 어설 클래스를 수정할 수 없습니다 생각이

 static String format(String message, Object expected, Object actual) { 
    String formatted= ""; 
    if (message != null && !message.equals("")) 
     formatted= message + " "; 
    String expectedString= String.valueOf(expected); 
    String actualString= String.valueOf(actual); 
    if (expectedString.equals(actualString)) 
     return formatted + "expected: " 
       + formatClassAndValue(expected, expectedString) 
       + " but was: " + formatClassAndValue(actual, actualString); 
    else 
     return formatted + "expected:<" + expectedString + "> but was:<" 
       + actualString + ">"; 
} 

에서 발견했습니다,하지만 :

+2

예,이 방법을 사용할 수 있습니다. 이것은 본질적으로 내가 내 대답에서 제안하는 것입니다. 메시지를 변경해야하는 경우 테스트를 수행하기 위해 코드를 작성해야합니다. –

관련 문제