单元测试假成功和假失败的避免方法
2008-04-30 10:19
281 查看
1 基本信息
摘要:描述了单元测试要避免的几个问题,并给出几个最佳实践建议。
2 假成功的单元测试
1. 问题描述:
在testXXX方法中,看到有这样的测试代码:
public void testInvoke(){
try{
…
assertEquals(a,b);
}
catch(Exception e){
…
}
}
2. 问题分析:
如果运行过程中没有出现异常,整个流程不会有任何问题,JUnit也认为整个测试正常通过。
但是一旦try中的某段代码运行出错,我们会发现由于在assertEquals被调用之前就已经跳到catch中,所以assertEquals并没有被执行,而catch及之后的代码中并没有相应的assertEquals语句,因此JUnit认为这个testXXX方法对应的测试用例正常通过,我们被结果欺骗了。
3. 解决方法:
将assertEquals语句移道try…catch之外,变成如下的代码样式:
public void testInvoke(){
Object a;
Object b;
try{
…
// assertEquals(a,b);
}
catch(Exception e){
…
}
assertEquals(a,b);
}
3 假失败的单元测试
有的时候被测试方法在申明的时候有throws语句,那么单元测试代码应该小心处理这个问题.
如果测试方法直接throws被测试方法所扔出的异常,则在被测试方法扔出这个异常的时候,该单元测试被认为是失败;但是作为被测试方法来讲,扔出该异常可能是正常的处理逻辑,而不能被认定是代码有错误。称这种情况为“假失败”的单元测试。
4 最佳实践
单元测试最好不要有try/catch这些内容,这些内容应该是正式代码中处理的。
单元测试只要在故意测试异常时才应该用到try/catch,如需要在某个环境下是否抛出某个异常;而其它情况try/catch应该避免使用。
摘要:描述了单元测试要避免的几个问题,并给出几个最佳实践建议。
2 假成功的单元测试
1. 问题描述:
在testXXX方法中,看到有这样的测试代码:
public void testInvoke(){
try{
…
assertEquals(a,b);
}
catch(Exception e){
…
}
}
2. 问题分析:
如果运行过程中没有出现异常,整个流程不会有任何问题,JUnit也认为整个测试正常通过。
但是一旦try中的某段代码运行出错,我们会发现由于在assertEquals被调用之前就已经跳到catch中,所以assertEquals并没有被执行,而catch及之后的代码中并没有相应的assertEquals语句,因此JUnit认为这个testXXX方法对应的测试用例正常通过,我们被结果欺骗了。
3. 解决方法:
将assertEquals语句移道try…catch之外,变成如下的代码样式:
public void testInvoke(){
Object a;
Object b;
try{
…
// assertEquals(a,b);
}
catch(Exception e){
…
}
assertEquals(a,b);
}
3 假失败的单元测试
有的时候被测试方法在申明的时候有throws语句,那么单元测试代码应该小心处理这个问题.
如果测试方法直接throws被测试方法所扔出的异常,则在被测试方法扔出这个异常的时候,该单元测试被认为是失败;但是作为被测试方法来讲,扔出该异常可能是正常的处理逻辑,而不能被认定是代码有错误。称这种情况为“假失败”的单元测试。
4 最佳实践
单元测试最好不要有try/catch这些内容,这些内容应该是正式代码中处理的。
单元测试只要在故意测试异常时才应该用到try/catch,如需要在某个环境下是否抛出某个异常;而其它情况try/catch应该避免使用。
相关文章推荐
- SQL Server 2008 安装过程中遇到“性能计数器注册表配置单元一致性”检查失败 问题的解决方法
- 测试php与mysql的连接是否成功的多种方法
- JavaScript开发——加载在线图片完整功能实现方法(正在加载-加载成功-加载失败)
- 连续创建多个Oracle触发器失败,单个创建才成功的解决方法
- 在安装composer成功创建larvel项目失败,解决方法 研究了一天终于OK了
- 只为成功找方法 不为失败找借口
- 测试注册页面不成功的解决方法
- SQL Server 2008 安装过程中遇到“性能计数器注册表配置单元一致性”检查失败 问题的解决方法
- mysql中max_allowed_packet参数的配置方法(避免大数据写入或者更新失败)
- php连接oracle方法_(sdic)测试成功
- JUnit4---实践三:支持多线程,失败重试执行测试case的方法
- 使用SDWebImage下载图片,sharedDownloader方法下载成功,new 方法下载失败
- [UnixODBC]UnixODBC配置数据源-isql测试成功,但程序连接失败
- ThinkPHP3.1.x修改成功与失败跳转页面的方法
- Tomcat测试“http://localhost:8080”失败解决方法
- 在做自动化测试断言失败时,如何成功打印中文字符。
- SQL Server 2008 安装过程中遇到“性能计数器注册表配置单元一致性”检查失败 问题的解决方法【已验证
- TestNG系列-第五章 测试方法、测试类和测试分组(续5)-9类级别注解、并发、失败情况
- maven测试是否下载成功方法-eclipse自带的功能使用特点
- wordpress 避免安装失败的方法