[英]is it possible to make test method parameterized, not an entire class?
据我所知,使用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中?
是的,这是可能的。 最近我开始了zohhak项目。 它可以让你写:
@TestWith({
"25 USD, 7",
"38 GBP, 2",
"null, 0"
})
public void testMethod(Money money, int anotherParameter) {
...
}
简单的解决方法(我假设超出了这个问题的范围)是将它们分成两个单独的参数化测试。
如果你倾向于将它们保持在一起,那么为参数化参数集添加额外的元素就可以了。 此元素应指示给定参数是针对一个测试还是另一个测试(或者如果需要,则为两者)。
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参数化测试服务于类 - 而不是方法,因此分解它会更好。
另一种选择是使用JCheck或QuickCheck for Java
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.