Cobertura单元测试覆盖率实例

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页面,可以看到详细的覆盖率以及代码执行次数等。

时间: 2024-10-27 12:21:29

Cobertura单元测试覆盖率实例的相关文章

[转载] JaCoCo:分析单元测试覆盖率的利器

转载自http://www.ibm.com/developerworks/cn/java/j-lo-jacoco/和http://www.cnblogs.com/chenfengmugu/p/4937257.html 本文主要介绍了如何使用 JaCoCo 分析 Java 项目的单元测试覆盖率,同时介绍了如何在 Eclipse 中安装和使用 EclEMMA,让开发人员可以直观地看到单元测试的覆盖情况. 前言 随着敏捷开发的流行,编写单元测试已经成为业界共识.但如何来衡量单元测试的质量呢?有些管理者

Web Service单元测试工具实例介绍之SoapUI

原文  Web Service单元测试工具实例介绍之SoapUI SoapUI是当前比较简单实用的开源Web Service测试工具,提供桌面应用程序和IDE插件程序两种使用方式.能够快速构建项目和组织测试用例是该工具的一大特性,下面将通过实例介绍如果使用SoapUI进行Web Service单元测试. l        构建项目 SoapUI工具中的项目(Project)是由一个或多个Web Service组成的,这里我们以“中国电视节目预告 Web 服务: http://www.webxml

Android-jacoco代码覆盖率:单元测试覆盖率+功能测试覆盖率

参考:https://docs.gradle.org/current/dsl/org.gradle.testing.jacoco.tasks.JacocoCoverageVerification.html gradle库下载:https://maven.aliyun.com/mvn/view 案例参考来源:https://www.jianshu.com/p/1a4a81f09526 https://www.jianshu.com/p/1a4a81f09526 其他:https://testerh

【转】Web Service单元测试工具实例介绍之SoapUI

SoapUI 是当前比较简单实用的开源Web Service 测试工具,提供桌面应用程序和IDE 插 件程序两种使用方式.能够快速构建项目和组织测试用例是该工具的一大特性,下面将通过实例介绍如果使用SoapUI 进 行Web Service 单元测试. l 构建项目 SoapUI 工具中的项目(Project )是由一个或多个Web Service 组成的,这里我们以"中国电视节目预告 Web 服务: http://www.webxml.com.cn/webservices/ChinaTVpro

SpringJunit4 进行单元测试(实例篇--紧接上一章)

前言: 在做WEB项目时,我们写好了一个Dao和Service后,接下来就是要进行单元测试,测试的时候还要等到Spring容器全部加载完毕后才能进行,然后通过拿到ApplicationContext对象来gerBean()方法进行测试,或者更笨点的就是写一个控制器,在浏览器敲入地址进行deBug跟踪测试,这样不仅效率低,而且收效甚微. 本章来讲解spring融合Junit4进行单元测试. 本章的测试源目录和包是紧随上一章节的源代码.点我查看上一章节 准备工作: jar包支持(上一章节代码里面已给

jacoco + eclipse单元测试覆盖率

概念 Jacoco:JaCoCo是一个开源的覆盖率工具,它针对的开发语言是java,其使用方法很灵活,可以嵌入到Ant.Maven中:可以作为Eclipse插件,可以使用其JavaAgent技术监控Java程序等等. 插桩:程序插桩,它是在保证被测程序原有逻辑完整性的基础上在程序中插入一些探针(又称为"探测仪",本质上就是进行信息采集的代码段,可以是赋值语句或采集覆盖信息的函数调用),通过探针的执行并抛出程序运行的特征数据,通过对这些数据的分析,可以获得程序的控制流和数据流信息,进而得

使用coverage工具统计python单元测试覆盖率

Coverage简介 Coverage是一种用于统计Python代码覆盖率的工具,通过它可以检测测试代码对被测代码的覆盖率如何.Coverage支持分支覆盖率统计,可以生成HTML/XML报告. 官方文档:http://coverage.readthedocs.org/en/latest/ 获取地址:http://pypi.python.org/pypi/coverage 也可以通过easy_install或pip安装:easy_install coverage. 安装后在Python27\Sc

单元测试覆盖率统计

参考http://www.cnblogs.com/turtle-fly/archive/2013/01/09/2851474.html 1.下载安装gcov/lcovgcov生成覆盖率数据lcov数据统计 2.编译gcc -g -pipe -m64 -fpic -DLINUX -fprofile-arcs -ftest-coverage 3.链接三条任选一个执行即可$ gcc --coverage$ gcc -lgcov$ gcc -fprofile-arcs 4.运行程序,会生成覆盖数据 5.

EclEmma单元测试覆盖率统计插件

EclEmma是Eclipse里的一个插件,安装简单,覆盖率显示直观.安装EclEmma.打开Eclipse,点击Help → Intall New SofaWare → Work with 输入 http://update.eclemma.org/  回车 点击完成结束配置,并开始下载安装插件,安装结束后Eclipse通常会提醒你重新启动Eclipse选择确定.在重新打开的Eclipse工具栏里你就会看到这个代码覆盖测试工具Eclemma!