数据源
参数化需要提供的数据可以是各种形式,我们只需要预处理一下,将它转化为一系列列表,一个列表里的就是一次测试需要用到的数据。比如我这里采用leetcode整数拆分的例子。测试源数据是一个txt文件,一行是一次测试需要用到的数据,第一个数是需要拆分的整数,第二个是它拆分后的数的最大乘积。
1,1
2,1
3,2
4,4
5,6
....
这是我的预处理程序:
private static Object[][] readFromTxt(String filename) {
Object[][] in = new Object[55][2];
BufferedReader reader;
try {
reader = new BufferedReader(new FileReader(filename));
String line = reader.readLine();
int row = 0;
while (line != null) {
String[] split = line.split(",");
for (int col = 0; col < split.length; col++) {
in[row][col] = Integer.parseInt(split[col]);
}
row++;
line = reader.readLine();
}
reader.close();
} catch (IOException e) {
e.printStackTrace();
}
return in;
}
然后我调用预处理函数,做好测试的数据源。注意这个函数需要加@Parameterized.Parameters注解来表示是他提供数据源。它返回一个collection类型,Junit就会把返回值作为数据源。
@Parameterized.Parameters
public static Collection primeNumbers() {
String path = "input/testinput.txt";
return Arrays.asList(readFromTxt(path));
}
测试
这就是测试函数,可以看到我们只需要写一次Assert语句就可以重复测试多次。
@Test
public void testPrimeNumberChecker() {
logger.info("Parameterized Number is : " + input);
Assert.assertEquals(expected, max.integerBreak(input));
}
其他注解
除此之外,我再介绍几个其他的注解。@BeforeClass ,@Before ,@Test ,@After ,@AfterClass 它们的作用就是标识当前函数的执行顺序,一个JUnit4的单元测试用例执行顺序为@BeforeClass -> @Before -> @Test -> @After -> @AfterClass,@BeforeClass和@AfterClass是分别在整个测试开始前和结束后执行,@Before 和 @After 是在每一次测试前和后执行。
log 信息
网友评论