Я всегда полагался на TestNG, чтобы передать параметры в методы тестирования, чтобы придать немного гибкости моим тестам или наборам.
Однако такая же гибкость может быть достигнута с помощью JUnit4.
Чтобы использовать это просто:
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
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
|
package com.marco.test; import java.util.Arrays; import java.util.Collection; import junit.framework.Assert; 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 ParameterizedTest { @Parameters public static Collection data() { return Arrays.asList( new Object[][] { /* Sport Nation year totWinners */ { “basket”, “usa”, 2002 , 5 , }, { “soccer”, “argentina”, 2003 , 2 }, { “tennis”, “spain”, 2004 , 10 }, { “chess”, “ireland”, 2005 , 0 }, { “eatingbananas”, “italy”, 2006 , 20 } }); } private final String sport; private final String nation; private final int year; private final int totWinners; public ParameterizedTest(String sport, String nation, int year, int totWinners) { this .sport = sport; this .nation = nation; this .year = year; this .totWinners = totWinners; } @Test public void test() { Assert.assertTrue(isDataCorrect(sport, nation, year, totWinners)); } private boolean isDataCorrect(String sport2, String nation2, int year2, int totWinners2) { return true ; } } |
JUnit создаст экземпляр класса ParameterizedTest и запустит метод testCombination () (или любой метод, помеченный как @Test) для каждой строки, определенной в статической коллекции.
Теории
Это еще одна интересная особенность от JUnit4, которая мне нравится. Теории в JUnit 4 используются для тестирования комбинаций входов с использованием одного и того же метода тестирования:
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
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
|
package com.marco.test; import static org.hamcrest.CoreMatchers.is; import java.math.BigDecimal; import org.junit.Assert; import org.junit.Assume; import org.junit.experimental.theories.DataPoint; import org.junit.experimental.theories.Theories; import org.junit.experimental.theories.Theory; import org.junit.runner.RunWith; @RunWith (Theories. class ) public class TheoryTest { @DataPoint public static int MARKET_FIRST_GOALSCORERE_ID = 2007 ; @DataPoint public static int MARKET_WDW_ID = 2008 ; @DataPoint public static BigDecimal PRICE_BD = new BigDecimal( 6664.0 ); @DataPoint public static double PRICE_1 = 0.01 ; @DataPoint public static double PRICE_2 = 100.0 ; @DataPoint public static double PRICE_3 = 13999.99 ; @Theory public void lowTaxRateIsNineteenPercent( int market_id, double price) { Assume.assumeThat(market_id, is( 2008 )); Assume.assumeThat(price, is( 100.0 )); // run your test Assert.assertThat(price, is( 100.0 )); } @Theory public void highTaxRateIsNineteenPercent( int market_id, double price) { Assume.assumeThat(market_id, is( 2007 )); Assume.assumeThat(price, is( 13999.99 )); Assert.assertThat(price, is( 13999.99 )); } @Theory public void highTaxRateIsNineteenPercent( int market_id, BigDecimal price) { Assume.assumeThat(market_id, is( 2007 )); Assert.assertThat(price, is(BigDecimal.valueOf( 6664 ))); } } |
На этот раз вам нужно пометить тестовый класс как @RunWith (Theories.class) и использовать @DataPoint для определения свойств, которые вы хотите протестировать.
JUnit будет называть рынок методов как @Theory, используя все возможные комбинации на основе предоставленной DataPoint и типа переменной. PRICE_BD DataPoint будет использоваться только в последнем методе, единственный, который принимает BigDecimal в параметрах своего метода.
Только параметры, которые удовлетворяют условию Assume.assumeThat (), будут проходить через проверку asser. Комбинации, которые не удовлетворяют условию Assume.assumeThat (), будут игнорироваться молча.
Ссылка: JUnit4 Parameterized and Theories от нашего партнера по JCG Марко Кастильего из блога Удалить дубликаты и исправить дурные имена .