java-是否可以使测试方法参数化,而不是整个类?
作者:互联网
据我了解,使用JUnit 4.x及其批注org.junit.runners.Parameterized,可以将单元测试设为“参数化”,这意味着对于所提供的每组参数,将从头开始再次执行整个单元测试.
这种方法限制了我,因为我无法创建“参数化方法”,例如:
..
@Test
public void testValid(Integer salary) {
Employee e = new Employee();
e.setSalary(salary);
assertEqual(salary, e.getSalary());
}
@Test(expected=EmployeeInvalidSalaryException.class)
public void testInvalid(Integer salary) {
Employee e = new Employee();
e.setSalary(salary);
}
..
如示例所示,在一个单元测试中我需要两个参数集合.是否可以在JUnit 4.x中进行?例如,在PHPUnit中是可能的.
ps.也许有可能在其他一些单元测试框架中而不是在JUnit中实现这种机制?
解决方法:
一个简单的解决方法(我认为这个问题超出了范围)是将它们分为2个单独的参数化测试.
如果您倾向于将它们放在一起,那么在参数化的参数集中添加额外的元素将为您解决问题.此元素应指示给定的参数是用于一项测试还是另一项测试(或如果需要,用于两项测试).
private Integer salary;
private boolean valid;
@Test
public void testValid() {
if (valid) {
Employee e = new Employee();
e.setSalary(salary);
assertEqual(salary, e.getSalary());
}
}
@Test(expected=EmployeeInvalidSalaryException.class)
public void testInvalid() {
if (!valid) {
Employee e = new Employee();
e.setSalary(salary);
}else {
throw new EmployeeInvalidSalaryException();
}
}
JUnit参数化测试服务于类而不是方法,因此将其分解会更好.
标签:unit-testing,junit,junit4,java 来源: https://codeday.me/bug/20191209/2096522.html