Junit4 - 参数初始化

本文介绍了如何在Junit4中使用参数初始化来避免创建过多的测试用例,详细讲述了在遇到问题时,从无参构造器到带参构造器的使用,并强调了需要添加@RunWith(Parameterized.class)注解的重要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

今天的测试作业是使用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)

### 如何在 JUnit 4 中进行参数化测试 为了提升单元测试效率并减少重复代码,在JUnit 4中引入了参数化测试功能。通过这种方式,可以针对同一组逻辑使用不同输入数据执行多次测试。 #### 创建参数化测试类 创建一个用于参数化的测试类时,需指定此测试运行器为`Parameterized`: ```java import org.junit.runner.RunWith; import org.junit.runners.Parameterized; @RunWith(Parameterized.class) public class ParameterizedTestExample { } ``` 定义私有成员变量存储传入的参数以及预期的结果值[^5]。 ```java private String param; // 测试用例输入 private int result; // 测试用例输出 ``` 构造函数接收上述声明的字段作为其参数,并初始化实例变量。每当框架准备运行带有新参数集的新测试案例时都会调用它。 ```java public ParameterizedTestExample(String param, int result){ this.param = param; this.result = result; } ``` 提供静态方法返回一组对象数组列表,其中每个内部数组代表单个测试案例的一套参数。注意该方法应被标记为`@Parameters`注解以便让JUnit识别到这是用来供给测试使用的数据源。 ```java @Parameterized.Parameters public static Collection<Object[]> data() { return Arrays.asList(new Object[][]{ {"case1", 1}, {"case2", 2}, {"case3", 3} }); } ``` 最后编写实际执行验证操作的具体测试方法。这里假设有一个简单的加法运算函数需要测试。 ```java @Test public void testAddition(){ assertEquals(result,param.length()); } ``` 以上就是完整的JUnit 4参数化测试设置过程。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值