今天的测试作业是使用Junit4对代码进行测试
在没有使用参数初始化之前,创了13个test,太冗杂。
下面来说说参数初始化。
以下是代码:
public class MyCalendar2 {
public int getNumberOfDaysInMonth(int year, int month) {
if (month == 1 || month == 3 || month == 6 || month == 7 ||
month == 8 || month == 10 )
return 31;
if (month == 4 || month == 5 || month == 9 || month == 11)
return 30;
if (month == 2) return 28;
return 0; // If month is incorrect
}
}
@RunWith(Parameterized.class)
public class MyCalendar2Test {
private static MyCalendar2 a = new MyCalendar2();
private int year;
private int month;
private int result;
@Parameters
public static Collection testData(){
return Arrays.asList(new Object[][] {
{2007,1,31},{2007,2,28},
{2007,3,31},{2007,4,30},
{2007,5,31},{2007,6,30},
{2007,7,31},{2007,8,31},
{2007,9,30},{2007,10,31},
{2007,11,30},{2007,12,31},
{2008,2,29}
});
}
public MyCalendar2Test(int year,int month,int result){
this.year = year;
this.month = month;
this.result = result;
}
@Test
public void testGetNumberOfDaysInMonth() {
int act = a.getNumberOfDaysInMonth(year,month);
System.out.println(act);
assertEquals(result,act,0);
}
}
第一次运行的时候出现:
Test class should have exactly one public zero-argument constructor
这句话的意思是需要有一个无参构造器
聪明的我立马get到了意思,加上一个无参构造器之后又报错:
Test class can only have one constructor
emmm...这句话的意思是测试类只能有一个构造器。
而我写了两个构造器,一个无参,一个带参。
我需要的是带参的构造器,因为要初始化数据啊。
后来发现,要使用带参构造器需要在类名前加注解:@RunWith(Parameterized.class)