Описание теста JUnit
Возможно ли в JUnit добавить краткое описание теста для будущего читателя (например, что тестируется, какое-то краткое объяснение, ожидаемый результат...)? Я имею в виду что-то вроде ScalaTest, где я могу написать:
test("Testing if true holds") {
assert(true)
}
Идеальный подход будет использовать некоторую аннотацию, например.
@Test
@TestDescription("Testing if true holds")
public void testTrue() {
assert(true);
}
Поэтому, если я запускаю такие аннотированные тесты с использованием Maven (или какого-то подобного инструмента), я мог бы иметь аналогичный вывод с тем, который у меня есть в SBT при использовании ScalaTest:
- Testing if entity gets saved correctly
- Testing if saving fails when field Name is not specified
- ...
В настоящее время я могу либо использовать ужасно длинные имена методов, либо писать комментарии javadoc, которые
не присутствует в выводе сборки.
Спасибо.
Ответы
Ответ 1
В JUnit 5 есть @DisplayName аннотация:
@DisplayName используется для объявления настраиваемого отображаемого имени для аннотированный тестовый класс или метод тестирования. Отображаемые имена обычно используются для тестирования отчетов в среде IDE и создания инструментов и может содержать пробелы, специальные символы и даже эможи.
Пример:
@Test
@DisplayName("Test if true holds")
public void checkTrue() {
assertEquals(true, true);
}
Ответ 2
Не совсем то, что вы ищете, но вы можете предоставить описание для любых методов assert
.
Что-то вроде:
@Test
public void testTrue() {
assertTrue("Testing if true holds", true);
}
Ответ 3
TestNG делает это так, что для меня является самым опрятным решением:
@Test(description="My funky test")
public void testFunk() {
...
}
Подробнее см. http://testng.org/javadocs/org/testng/annotations/Test.html.
Ответ 4
Я предпочитаю следовать стандартным форматам при тестировании в JUnit. Имя теста будет
test[method name]_[condition]_[outcome]
для примера:
@Test
public void testCreateObject_nullField_errorMessage(){}
@Test
public void testCreateObject_validObject_objectCreated(){}
Я думаю, что этот подход полезен при выполнении TDD, потому что вы можете просто начать писать все имена тестов, чтобы вы знали, что вам нужно для тестирования/разработки.
Тем не менее я бы приветствовал функциональность описания теста от JUnit.
И это, безусловно, лучше, чем другие тесты, которые я видел в прошлом, например:
@Test public void testCreateObject1(){}
@Test public void testCreateObject2(){}
@Test public void testCreateObject3(){}
или
@Test public void testCreateObjectWithNullFirstNameAndSecondNameTooLong(){}
Ответ 5
Вы можете назвать метод тестирования после теста:
public void testThatOnePlusOneEqualsTwo() {
assertEquals(2, 1 + 1);
}
Это будет отображаться в Eclipse, Surefire и большинстве других бегунов.
Ответ 6
подробное решение будет: вы можете добавить Logger
к вашему тесту, чтобы записать результаты в файл. См. например log4j. Затем вы можете прочитать результаты в файле, а также распечатать успешные инструкции, что assert
statemens не может.
простое решение. Вы можете добавить описание JDoc
к каждому тестовому методу, это будет описано, если вы создадите JavaDoc.
Также каждый оператор assert
может предоставлять сообщение, которое будет напечатано, всякий раз, когда сбой assert
.
/**
* test the List#size() increasement after adding an Object to a List.
*/
public void testAdd(){
List<Object> list = new LinkedList<>();
list.add(new Object());
assertEquals("size should be 1, because of adding an Object", 1, list.size());
}
НЕ используйте System.out.println("your message");
, потому что вы не знаете, как будут выполняться тесты, и если среда не предоставляет консоль, ваши сообщения не будут отображаться.