前言:本文章需要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
什么是测试覆盖率?
覆盖率是测量测试完整性的一个手段,是衡量测试是否完整的一个标准,我们编写的代码当中每个分支都应该是被覆盖的,这样才能保证测试是完全的,正确的.请留意以下例子
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
分享到:
相关推荐
我们将此报告与 Hudson/Jenkins 结合使用来跟踪测试覆盖率。 下面的代码示例说明了如何使用代码。 有关详细信息,请参见 example.m。 %将源代码添加到路径addpath('src'); %import 类、函数导入 edu.stanford....
Cobertura可用于分析Java代码的测试覆盖率。Cobertura根据没有被测试覆盖的代码生成基于HTML的报告。 Cobertura提供可用于插装、检查和测试代码的工具。通过监控可测试的代码,Cobertura允许你使用你选择的测试框架...
def project do [ test_coverage: [ tool: CoberturaCover ] ]enddefp deps do [ { :cobertura_cover , " ~> 0.9.0 " , only: :test } ]end 现在,您可以运行mix test --cover以在 CI 工作流中生成coverage.xml 。...
EMMA,它是一个免费、开源的、用来衡量单元测试覆盖度... EMMA生成的报告类似于Cobertura(另一个功能类似于EMMA的开源工具),请参考:用Ant+JUnit+Cobertura轻松控制单元测试质量:http://ouzhong.blog.hexun.com/323
自动查找需要测试覆盖率的差异线。 还可以找到有违规的差异行(根据pycodestyle,pyflakes,flake8或pylint之类的工具)。 在代码审查期间,它用作代码质量指标。 概述 差异覆盖率是测试覆盖的新行或修改行的百分比...
测试代码覆盖率插件该插件将使用Cobertura生成代码覆盖率报告。跑步: grails test-app -coverage命令行选项: 默认情况下,该脚本将创建HTML报告并将其放置在tests / report / cobertura目录中。 如果您希望使用XML...
伊斯坦布尔测试 介绍 该存储库演示了我们如何不仅可以对 JavaScript 源... 还将生成一些 Jenkins 友好的 XML 结果文件(用于单元测试的 JUnit 和用于代码覆盖率的 Cobertura)。 node_modules/karma/bin/karma start
解析由构建生成的代码覆盖率报告,并将代码覆盖率状态注释发布到Bitbucket拉取请求: 支持覆盖率报告 Jacoco jacoco.xml Cobertura cobertura.xml或cobertura-coverage.xml 三叶草clover.xml SimpleCov JSON...
代码覆盖率报告。 您可以在运行器或运行器上运行测试并生成工件: 要使用自托管运行器,您必须设置一台装有 MATLAB(R2013b 或更高版本)的计算机作为运行器。 该操作使用运行器系统路径上最顶层的 MATLAB 版本。 要...
要生成(单元测试)代码覆盖率报告,请调用mvn cobertura:cobertura ,然后将浏览器指向target/site/cobertura/的输出。 约定 本示例遵循以下基本约定: | 单元测试| 集成测试--- | --- | ---驻留于: | | src/...
该插件具有以下目标: jscover-file:instrument检测文件系统上JavaScript jscover-file:jscover使用file-mode运行JavaScript测试并生成JavaScript代码覆盖率jscover-server:jscover使用server-mode运行JavaScript...
用于MATLAB:registered:的Jenkins:trade_mark:插件使您能够运行MATLAB和Simulink:registered:测试并生成工件,例如PDF测试报告,JUnit和TAP测试结果以及Cobertura代码或模型覆盖率报告。 您也可以使用该插件导出...
生成测试结果报告(如有必要) 为源文件夹生成Cobertura XML格式的代码覆盖率报告 当前,只有Azure DevOps直接支持代码覆盖率 要查看用于显示覆盖率结果的示例,请参阅 示例MATLAB代码示例dayofyear.m是一个简单函数...
Amex开玩笑的预设 ...告诉Jest将覆盖率报告为text ,输出到您的控制台,Jenkins使用的cobertura格式以及lcov生成您都习惯从伊斯坦布尔看到的漂亮HTML 告诉Jest返回失败,除非分支,函数,行和语句的代码
模块加载器挂钩即时检测代码运行节点单元测试的命令行工具“打开覆盖率”并且测试运行器没有任何合作多种报告格式: HTML 、 LCOV 、 Cobertura等。 能够在提供需要在浏览器上测试的 JS 文件时用作。 可以在命令行...