2013-05-13 1 views
6

Я использование утверждения равно сравнения двух чиселПользовательское сообщение об исключении с использованием JUnit assertEquals?

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

Затем, когда я генерировать отчет теста я получаю

«Мое сообщение об ошибке ожидается (Первый) был (Второй) "

Как я могу настроить часть, выделенную курсивом? И формат чисел?

+0

Я предположил, что вы используете Java. Если это Scala, отрегулируйте теги соответствующим образом. –

ответ

5

Сообщение жестко закодировано в классе Assert. Вам придется написать свой собственный код для создания пользовательского сообщения:

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

(Примечание: выше грубый пример - вы хотите, чтобы проверить нули и т.д. См кода Assert.java, чтобы увидеть, как это сделанный).

7

Вы можете использовать что-то вроде этого:

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

Это не улучшит ситуацию. ОП уже знает, как добавить сообщение об ошибке, но цель состоит в том, чтобы изменить формулировку части курсивом. Ваше решение все еще будет иметь формулировку. –

+0

Вы уверены? Запуск на Eclipse с (2,1) я получаю только «Failure: я ожидал, что 2 будет равен 1», а не «ожидаемый ... был» ... – Salem

+1

@ Салем, потому что вы используете assertTrue, not assertEquals – kryger

0

Благодаря вашему ответу я нашел в классе Assert это

 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 + ">"; 
} 

Я предполагаю, что я не могу изменить класс Junit Assert, но Я могу создать новый класс в моем проекте с тем же именем, просто изменив формат, правильно? Или я могу просто изменить формат в моем классе, и это повлияет на выброс Exception?

+2

Да, вы можете воспользоваться этим подходом. Это, по сути, то, что я предлагаю в своем ответе, - вам нужно будет написать свой собственный код, чтобы выполнить тест, если вам нужно изменить сообщение. –