使用Cobertura生成测试覆盖率报告_JAVA_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > JAVA > 使用Cobertura生成测试覆盖率报告

使用Cobertura生成测试覆盖率报告

 2013/8/8 19:08:24  ray_yui  程序员俱乐部  我要评论(0)
  • 摘要:前言:本文章需要JUnit单元测试框架的基础知识,若读者还不具备,请阅读笔者的JUnit文章:http://ray-yui.iteye.com/blog/1914106UnitTest系列文章:使用JUnit开发单元测试:http://ray-yui.iteye.com/blog/1914106使用DBUnit扩展JUnit:http://ray-yui.iteye.com/blog/1914979使用EasyMock扩展Junithttp://ray-yui.iteye
  • 标签:使用 测试 覆盖率

前言:本文章需要JUnit单元测试框架的基础知识,若读者还不具备,请阅读笔者的JUnit文章:http://ray-yui.iteye.com/blog/1914106



UnitTest系列文章:
      使用JUnit开发单元测试:http://ray-yui.iteye.com/blog/1914106
      使用DBUnit扩展JUnit:http://ray-yui.iteye.com/blog/1914979
      使用EasyMock扩展Junithttp://ray-yui.iteye.com/blog/1916170
      使用Cactus测试Servlethttp://ray-yui.iteye.com/blog/1917515
      使用Spring TestContext测试Spring应用http://ray-yui.iteye.com/blog/1921424


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

class="java" name="code">
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通过该报告和指标和开发者进行沟通,从而解决开发当中遗留的问题
  • 大小: 20.4 KB
  • 大小: 84.1 KB
  • 大小: 50 KB
  • 大小: 36.9 KB
  • 大小: 57.9 KB
  • 查看图片附件
发表评论
用户名: 匿名