Пару лет назад я писал о параметризованных тестах 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})
.