Подтвердить что ты не робот

Описание теста 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, которые не присутствует в выводе сборки.

Спасибо.

4b9b3361

Ответ 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);
}

Ответ 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");, потому что вы не знаете, как будут выполняться тесты, и если среда не предоставляет консоль, ваши сообщения не будут отображаться.