2012-04-21 2 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 просто вызовет .equals(), если первый arg не равен null ...

+1

Существует не символ печати в вашей второй «б» String. – 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 «т проникнуть в ваш тест. Может быть, попробовать это, чтобы исключить его?

String expected = "a b"; 
assertTrue(expected.equals(decode1)); 
assertEquals(expected, decode1); 
Смежные вопросы