您的位置:首页 > 编程语言 > Java开发

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

2016-03-21 16:44 726 查看
什么是测试覆盖率? 

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

 
package com.accentrix.ray.service;  
 
import com.accentrix.ray.dao.UserDao;  
import com.accentrix.ray.entity.User;  
 
public class UserService {  
 
    UserDao userDao = new UserDao();  
 
    public User login(String username, String password) {  
        User user = userDao.get(username);  
        if (user == null)  
            throw new RuntimeException("用户名不存在");  
        if (user.getPassword().equals(password))  
            throw new RuntimeException("密码错误");  
        return user;  
    }  
}  
 

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

 
package com.accentrix.ray.test;  
 
import junit.framework.Assert;  
 
import org.junit.Before;  
import org.junit.Test;  
 
import com.accentrix.ray.entity.User;  
import com.accentrix.ray.service.UserService;  
 
public class TestUserService {  
 
    private User user;  
    private UserService userService;  
 
    @Before 
    public void setUp() {  
        user = new User(1, "Ray", "123");  
        userService = new UserService();  
    }  
 
    @Test(expected = RuntimeException.class)  
    public void testUsernameNotExistLogin() {  
        // 测试用户名不存在的情况  
        userService.login("test", "123");  
    }  
 
    @Test(expected = RuntimeException.class)  
    public void testPasswordNotMatchLogin() {  
        // 测试密码不正确的情况  
        userService.login(user.getUsername(), "4444");  
    }  
 
    @Test 
    public void testAccessLogin() {  
        //测试成功登陆  
        User loginUser = userService.login(user.getUsername(),  
                user.getPassword());  
        Assert.assertNotNull(loginUser);  
        Assert.assertEquals(loginUser.getUsername(), user.getUsername());  
        Assert.assertEquals(loginUser.getPassword(), user.getPassword());  
    }  
}  
 
 

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

我们怎么检测我们的测试是否完全覆盖的呢? 

      通过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的插件依赖 

 
<plugin> 
    <groupId>org.codehaus.mojo</groupId> 
    <artifactId>cobertura-maven-plugin</artifactId> 
    <version>2.4</version> 
</plugin> 

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


 

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


 

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


 

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


 

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

总结: 

      测试率覆盖报告是评测测试是否完整的一个重要手段,测试覆盖率低下证明测试覆盖不足,当系统进行迭代开发的时候,就会出现各种各样的问题,而且覆盖率也是QA关注的一项重要指标,QA通过该报告和指标和开发者进行沟通,从而解决开发当中遗留的问题 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息