编程语言
首页 > 编程语言> > java-是否可以使测试方法参数化,而不是整个类?

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