文档章节

Cobertura单元测试覆盖率实例

l
 lvk618
发布于 2016/06/15 09:10
字数 688
阅读 13
收藏 1

Cobertura 是一种开源工具,它通过检测基本的代码,并观察在测试包运行时执行了哪些代码和没有执行哪些代码,来测量测试覆盖率。除了找出未测试到的代码并发现 bug 外,Cobertura 还可以通过标记无用的、执行不到的代码来优化代码,还可以提供 API 实际操作的内部信息。

Cobertura跟Maven完美结合,只需要在pom文件中增加一个插件即可:

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

项目开发正确过程应该如此:

1.创建一个User对象:

package jmust.demo.Cobertura;

/**
 * Hello world!
 *
 */
public class User 
{
    private String userName;
    private String password;
    private String nickName;
    public String getUserName() {
        return userName;
    }
    public void setUserName(String userName) {
        this.userName = userName;
    }
    public String getPassword() {
        return password;
    }
    public void setPassword(String password) {
        this.password = password;
    }
    public String getNickName() {
        return nickName;
    }
    public void setNickName(String nickName) {
        this.nickName = nickName;
    }
    
    public User(){
        super();
    }
    
    public User(String userName,String password,String nickName){
        super();
        this.userName = userName;
        this.password = password;
        this.nickName = nickName;
    }
}
2.定义功能接口类:

package jmust.demo.Cobertura.Inter;

import jmust.demo.Cobertura.User;

public interface IUserService {

    public boolean add(User user);
    public boolean delete(String userName);
    public User load(String userName);
    public User login(String userName,String password);
}

3.编写单元测试类:

package jmust.demo.CoberturaTest;

import static org.junit.Assert.*;

import org.junit.Before;
import org.junit.Test;

import jmust.demo.Cobertura.User;
import jmust.demo.Cobertura.Exception.UserException;
import jmust.demo.Cobertura.Inter.IUserService;
import jmust.demo.Cobertura.Service.UserService;

/**
 * Unit test for simple User.
 */
public class UserServiceTest {
   private IUserService us;
   private User user;
   
   @Before
   public void setUp(){
       //初始化
       us = new UserService();
       user = new User("admin","123","管理员");
   }
   
   @Test
   public void addTest(){
       User u = user;
       us.add(u);
       User tu = us.load("admin");
       assertNotNull(tu);
   }
   
   @Test(expected=UserException.class)  
   public void AddExistUsername(){  
       us.add(user);  
       User tu = new User("admin", "1234", "alskdf");  
       boolean state = us.add(tu);  
       assertFalse(state);
   }  
     
   @Test  
   public void testDelete(){  
       us.add(user);  
       User tu = us.load(user.getUserName());  
       assertNotNull(tu);  
       us.delete(user.getUserName());  
       tu = us.load(user.getUserName());  
       assertNull(tu);  
   }  
     
   @Test  
   public void testLogin(){  
       us.add(user);  
       String username=user.getUserName();  
       String password=user.getPassword();  
       User tu = us.login(username, password);  
       assertNotNull(tu);
   }  
     
   @Test(expected=UserException.class)  
   public void testNotExistsUserLogin(){  
       us.add(user);  
       String username="admin1";  
       String password="123";  
       User tu = us.login(username, password);  
       assertNotNull(tu);
   }  
     
   @Test(expected=UserException.class)  
   public void testPasswordErrorUserLogin(){  
       us.add(user);  
       String username="admin";  
       String password="1235";  
       User tu = us.login(username, password);  
       assertNotNull(tu);
   }  
}

4.再编写功能实现类:

package jmust.demo.Cobertura.Service;

import java.util.HashMap;
import java.util.Map;

import jmust.demo.Cobertura.User;
import jmust.demo.Cobertura.Exception.UserException;
import jmust.demo.Cobertura.Inter.IUserService;

public class UserService implements IUserService{
    
    private Map<String,User> us = new HashMap<String,User>();
    /**
     * 添加
     */
    public boolean add(User user) {
        if(load(user.getUserName()) != null){
            throw new UserException("用户已存在");
        }
        us.put(user.getUserName(), user);
        return true;
    }
    /**
     * 删除
     */
    public boolean delete(String userName) {
        us.remove(userName);
        
        return true;
    }
    /**
     * 加载
     */
    public User load(String userName) {
        return us.get(userName);
    }
    /**
     * 登录
     */
    public User login(String userName, String password) {
        User u = load(userName);
        if(u == null) throw new UserException("用户不存在");
        if(!u.getPassword().equals(password)) throw new UserException("用户密码不正确");
        return u;
    }

}

到此,项目开发完成了。然后我们来执行,看看它的覆盖率如何:

首先,我们先来把项目打包成jar包,通过maven命令执行,  mvn install或者mvn package或者mvn deploy

然后,我们再继续执行maven命令,mvn cobertura:cobertura ,完成后,会在项目的目录target下有个site文件夹,我们打开里面的index页面,可以看到详细的覆盖率以及代码执行次数等。




本文转载自:http://blog.csdn.net/lk10207160511/article/details/50282533

l
粉丝 3
博文 80
码字总数 792
作品 0
广州
私信 提问
使用cobertura-maven-plugin做单元测试覆盖率统计

cobertura-maven-plugin提供单元测试整体覆盖率以及分支覆盖率的统计工具,给编写单元测试的开发者提供一个参考,在pom.xml的配置如下: <plugin><groupId>org.codehaus.mojo</groupId><art......

凯文加内特
2015/04/07
202
0
使用 Cobertura 和反射机制提高 Java 单元测试中的代码覆盖率

引言 单元测试是软件开发过程中重要的质量保证环节。单元测试可以减少代码中潜在的错误,使缺陷更早地被发现,从而降低了软件的维护成本。软件代码的质量由单元测试来保证,而单元测试自身的...

lw_tao
2014/04/03
116
0
实践Jenkins集成Cobertura自动化构建SpringBoot工程

热文推荐: 你的微服务敢独立交付么? 理解JWT的使用场景和优劣 从Spring-Session源码看Session机制的实现细节 理解使用 JWT 设计的单点登录系统 JDK 1.5 - 1.8 各版本的新特性总结 Spring B...

程序猿DD
2018/04/28
0
0
Eclipse中配置junit

在Eclipse中配置Junit的方法有两种方式: 第一种方法: 1、下载junit的jar包,目前它的版本是junit3.8.1,可以从www.junit.org上下载。 2、在要使用Junit的project名上,点击properties--jav...

xiahuawuyu
2012/07/24
2.6K
0
JUnit4 与 JMock 之双剑合璧

引言 单元测试可以保证代码的质量,最大程度降低修复系统 bug 的时间和成本。能被称为测试的阶段有:单元测试、集成测试、系统测试和用户测试。修复系统 bug 的时间和成本随着这些阶段的推移...

IBMdW
2011/05/04
2.9K
1

没有更多内容

加载失败,请刷新页面

加载更多

前端技术之:Prisma Demo服务部署过程记录

安装前提条件: 1、已经安装了docker运行环境 2、以下命令执行记录发生在MackBook环境 3、已经安装了PostgreSQL(我使用的是11版本) 4、Node开发运行环境可以正常工作 首先需要通过Node包管...

popgis
今天
5
0
数组和链表

数组 链表 技巧一:掌握链表,想轻松写出正确的链表代码,需要理解指针获引用的含义: 对指针的理解,记住下面的这句话就可以了: 将某个变量赋值给指针,实际上就是将这个变量的地址赋值给指...

code-ortaerc
今天
4
0
栈-链式(c/c++实现)

上次说“栈是在线性表演变而来的,线性表很自由,想往哪里插数据就往哪里插数据,想删哪数据就删哪数据...。但给线性表一些限制呢,就没那么自由了,把线性表的三边封起来就变成了栈,栈只能...

白客C
今天
43
0
Mybatis Plus service

/** * @author beth * @data 2019-10-20 23:34 */@RunWith(SpringRunner.class)@SpringBootTestpublic class ServiceTest { @Autowired private IUserInfoService iUserInfoS......

一个yuanbeth
今天
5
0
php7-internal 7 zval的操作

## 7.7 zval的操作 扩展中经常会用到各种类型的zval,PHP提供了很多宏用于不同类型zval的操作,尽管我们也可以自己操作zval,但这并不是一个好习惯,因为zval有很多其它用途的标识,如果自己...

冻结not
昨天
6
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部