Статьи

JUnit: именование отдельных тестовых случаев в параметризованном тесте

Пару лет назад я писал о параметризованных тестах JUnit . Одна из вещей, которые мне не нравились в них, заключалась в том, что JUnit называл индивидуальные тестовые наборы, используя числа, поэтому, если они потерпели неудачу, вы не знали, какие тестовые параметры вызвали ошибку. Следующий скриншот Eclipse покажет вам, что я имею в виду:

Параметризованный тест без имен

Однако в JUnit 4.11 аннотация @Parameters теперь принимает аргумент name который можно использовать для отображения параметров в имени теста и, следовательно, для их большей наглядности. Вы можете использовать следующие заполнители в этом аргументе, и они будут заменены фактическими значениями во время выполнения JUnit:

  • {index} : текущий индекс параметра
  • {0} , {1} ,…: первое, второе и т. Д., Значение параметра

Вот пример:

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
import static org.junit.Assert.assertEquals;
  
import java.util.Arrays;
import java.util.Collection;
  
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;
import org.junit.runners.Parameterized.Parameters;
  
@RunWith(Parameterized.class)
public class StringSortTest {
  
  @Parameters(name = "{index}: sort[{0}]={1}")
  public static Collection<Object[]> data() {
    return Arrays.asList(new Object[][] {
          { "abc", "abc"},
          { "cba", "abc"},
          { "abcddcba", "aabbccdd"},
          { "a", "a"},
          { "aaa", "aaa"},
          { "", ""}
        });
  }
  
  private final String input;
  private final String expected;
  
  public StringSortTest(final String input, final String expected){
    this.input = input;
    this.expected = expected;
  }
  
  @Test
  public void testSort(){
    assertEquals(expected, sort(input));
  }
  
  private static String sort(final String s) {
    final char[] charArray = s.toCharArray();
    Arrays.sort(charArray);
    return new String(charArray);
  }
}

Когда вы запустите тестирование, вы увидите отдельные тестовые наборы, названные так, как показано на скриншоте Eclipse ниже, поэтому легко определить параметры, используемые в каждом тестовом примере.

Параметризованный тест с именами отдельных тестовых случаев

Обратите внимание, что из-за ошибки в Eclipse имена, содержащие скобки, усекаются. Вот почему мне пришлось использовать sort[{0}] вместо sort({0}) .

Ссылка: JUnit: Обозначение отдельных тестовых случаев в параметризованном тесте от нашего партнера JCG Фахда Шарифа в блоге fahd.blog .