为什么80%的码农都做不了架构师?>>>
序
junit4的Parameterized tests的使用方法太过费劲了,这里介绍下如何使用JUnitParams来简化Parameterized tests。
junit4原生的Parameterized tests实例
@RunWith(Parameterized.class)
public class FibonacciTest {@Parameterspublic static Collection<Object[]> data() {return Arrays.asList(new Object[][] { { 0, 0 }, { 1, 1 }, { 2, 1 }, { 3, 2 }, { 4, 3 }, { 5, 5 }, { 6, 8 } });}private int fInput;private int fExpected;public FibonacciTest(int input, int expected) {fInput= input;fExpected= expected;}@Testpublic void test() {assertEquals(fExpected, Fibonacci.compute(fInput));}
}
JUnitParams的使用
maven
<dependency><groupId>pl.pragmatists</groupId><artifactId>JUnitParams</artifactId><version>1.1.0</version><scope>test</scope>
</dependency>
实例
@RunWith(JUnitParamsRunner.class)
public class PersonTest {@Test@Parameters({"17, false", "22, true" })public void personIsAdult(int age, boolean valid) throws Exception {assertThat(new Person(age).isAdult(), is(valid));}}
junit5的更新
当然junit5也对Parameterized tests的使用进行简化,如下:
@ParameterizedTest
@EnumSource(value = TimeUnit.class, names = { "DAYS", "HOURS" })
void testWithEnumSourceInclude(TimeUnit timeUnit) {assertTrue(EnumSet.of(TimeUnit.DAYS, TimeUnit.HOURS).contains(timeUnit));
}
小结
如果还是使用junit5之前的版本,那么可以尝试使用JUnitParams来简化Parameterized tests。如果你已经使用junit5,那么恭喜你,可以不用额外引入JUnitParams就可以方便地进行Parameterized tests。
doc
- parameterized-tests
- JUnitParams
- writing-tests-parameterized-tests