2012-04-21 3 views
0

다음 코드는 테스트 중 하나입니다. 두 번째 주장은 실패합니다.Junit + UrlDecoder :이 테스트가 실패하는 이유는 무엇입니까?

String decode1 = URLDecoder.decode("a%20b", "UTF-8"); 

assertTrue("a b".equals(decode1)); // pass 
assertEquals("a‌ b", decode1); // FAIL 

이유를 알 수 없습니다. 이것은 JUnit의 버그입니까? JUnit은 첫 번째 arg가 null이 아니면 .equals()를 호출 할 것이라고 생각할 것입니다 ...

+1

입니다. 두 번째 "a"문자열에는 인쇄 할 수없는 문자가 있습니다. – Perception

답변

2

, 그것은 마지막 "AB"문자열을 삭제하고 다시 입력 한 후, 그러나. 실패 이 페이지의 소스를 볼 때 보지 못하게하는 일부 내장 문자가 있어야합니다.

실패한 어설 션은 예상 값이

"a[ ]b" 
0

이것은 equals()를 호출합니다. source code from kickjava을 보면, 우리는 다음을 가지고 있습니다. (당신의 JUnit 3.8 또는 4.0 사용하는 경우는 말하지 않았다, 그러나 나는 그들이이 기본 뭔가의 구현을 변경하지 않은 확신 해요.

public static void assertEquals(String msg, Object obj1, Object obj2) { 

     if (obj1 == null && obj2 == null) { 
      return; 
     } 

     if (obj1 != null && obj1.equals(obj2)) { 
      return; 
     } 

     fail(msg + " expected=" + obj1 + " actual=" + obj2); 
} 

을 100 % 확신 길잃은 인코딩 된 문자 didn를인가 'T는 아마 그것을 배제하기 위해보십시오. 테스트에 몰래? 당신이 명시된 바와 같이 나는 새로운 테스트에 코드를 붙여

String expected = "a b"; 
assertTrue(expected.equals(decode1)); 
assertEquals(expected, decode1);