Java单元测试Junit(六)使用Cobertura生成测试覆盖率报告

什么是测试覆盖率? 
      覆盖率是测量测试完整性的一个手段,是衡量测试是否完整的一个标准,我们编写的代码当中每个分支都应该是被覆盖的,这样才能保证测试是完全的,正确的.请留意以下例子 

 

 
 
  1. package com.accentrix.ray.service;  
  2.  
  3. import com.accentrix.ray.dao.UserDao;  
  4. import com.accentrix.ray.entity.User;  
  5.  
  6. public class UserService {  
  7.  
  8.     UserDao userDao = new UserDao();  
  9.  
  10.     public User login(String username, String password) {  
  11.         User user = userDao.get(username);  
  12.         if (user == null)  
  13.             throw new RuntimeException("用户名不存在");  
  14.         if (user.getPassword().equals(password))  
  15.             throw new RuntimeException("密码错误");  
  16.         return user;  
  17.     }  
  18. }  
  19.  



      在上面的登陆例子当中,我们如何才算正确覆盖呢?请看以下测试类 

 

 
 
  1. package com.accentrix.ray.test;  
  2.  
  3. import junit.framework.Assert;  
  4.  
  5. import org.junit.Before;  
  6. import org.junit.Test;  
  7.  
  8. import com.accentrix.ray.entity.User;  
  9. import com.accentrix.ray.service.UserService;  
  10.  
  11. public class TestUserService {  
  12.  
  13.     private User user;  
  14.     private UserService userService;  
  15.  
  16.     @Before 
  17.     public void setUp() {  
  18.         user = new User(1"Ray""123");  
  19.         userService = new UserService();  
  20.     }  
  21.  
  22.     @Test(expected = RuntimeException.class)  
  23.     public void testUsernameNotExistLogin() {  
  24.         // 测试用户名不存在的情况  
  25.         userService.login("test""123");  
  26.     }  
  27.  
  28.     @Test(expected = RuntimeException.class)  
  29.     public void testPasswordNotMatchLogin() {  
  30.         // 测试密码不正确的情况  
  31.         userService.login(user.getUsername(), "4444");  
  32.     }  
  33.  
  34.     @Test 
  35.     public void testAccessLogin() {  
  36.         //测试成功登陆  
  37.         User loginUser = userService.login(user.getUsername(),  
  38.                 user.getPassword());  
  39.         Assert.assertNotNull(loginUser);  
  40.         Assert.assertEquals(loginUser.getUsername(), user.getUsername());  
  41.         Assert.assertEquals(loginUser.getPassword(), user.getPassword());  
  42.     }  
  43. }  
  44.  
  45.  



      从上面的测试类可以看到,登陆业务中的每一个分支都被单元测试所覆盖,包括异常的覆盖和成功的覆盖 

我们怎么检测我们的测试是否完全覆盖的呢? 
      通过Cobertura框架就可以自动生成测试率覆盖报告,通过报告可以观察我们的测试覆盖率百分比,和检查究竟还有哪些分支没有被覆盖,也可以使用Eclipse的插件CodePro AnalytiX来进行检测 
      Cobertura:http://sourceforge.net/projects/cobertura/files/cobertura/ 
      CodePro AnalytiX:http://dl.google.com/eclipse/inst/codepro/latest/3.6       

Cobertura使用: 
      增加Maven的插件依赖 

 

 
 
  1. <plugin> 
  2.     <groupId>org.codehaus.mojo</groupId> 
  3.     <artifactId>cobertura-maven-plugin</artifactId> 
  4.     <version>2.4</version> 
  5. </plugin> 



      此时项目的目录结构如下图 

Java单元测试Junit(六)使用Cobertura生成测试覆盖率报告_www.fengfly.com 

此时只需简单输入cobertura:cobertura即可,如下图 

Java单元测试Junit(六)使用Cobertura生成测试覆盖率报告(2)_www.fengfly.com  

      此时target当中将会产生出如下图的结构 

Java单元测试Junit(六)使用Cobertura生成测试覆盖率报告(2)_www.fengfly.com  

      打开index.html,点击我们的的测试类,就可以看见如下图 

Java单元测试Junit(六)使用Cobertura生成测试覆盖率报告(2)_www.fengfly.com  

      绿色这表明我们的测试类已经完全覆盖了UserService这个被测试类 


总结: 
      测试率覆盖报告是评测测试是否完整的一个重要手段,测试覆盖率低下证明测试覆盖不足,当系统进行迭代开发的时候,就会出现各种各样的问题,而且覆盖率也是QA关注的一项重要指标,QA通过该报告和指标和开发者进行沟通,从而解决开发当中遗留的问题 
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值