ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

java-是否可以使测试方法参数化,而不是整个类?

2019-12-09 05:03:35  阅读:272  来源: 互联网

标签:unit-testing junit junit4 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

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有