`
gao_xianglong
  • 浏览: 462317 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

Use JUnit4.x+EclEmma(Code Coverage )

阅读更多

前言

 

谈到单元测试,想必各位都应该听说过Junit的大名。是的,直至今日,虽然目前市面上确实拥有诸多优秀的Test Frameworks,但笔者至今仍在使用JUnit来跑自己的单元测试。Junit目前的最新版本为4.x,至于变化吗还是有的,最明显的莫过于基于Annotations的方式...

其实说测试工作到底属于谁,笔者不想过于纠结,从客观来说自己写的代码,自己测试确实是应该的,所以笔者不再想再次争论开发人员是否应该把所有工作中心都集中在业务层之类的话语,那么就此打住。

当然笔者本篇博文不是要介绍如何使用JUnit,而是介绍如何使用JUnit和EclEmma工具做集成测试,这才是本篇文章的目的。笔者比较推崇EclEmma最为你项目的代码测试覆盖率工具,原因如下3点:

 

1、使用简单方便,维护成本低

2、开源等之类的都是废话,更关注的是能够生成像模像样的测试覆盖率文档交差是主要;

3、想要让你的项目开发更规范、更流程化,这种形式显然是必要的;

 

一、EclEmma下载与安装

 

EclEmma作为一款优秀的代码测试覆盖率插件,目前在市面上还是拥有较为多的使用场景。那么如果你eclipse等IDE上没有安装,你仍然需要老老实实的下载安装:

 

安装过程大概耗时一分钟左右,这段时间你可以很果断的站起来扭扭屁股,活动活动老胳膊老腿,防止脑血栓,脑淤血等疾病...

安装好后,eclipse会自动重启,你只需耐心等待即可。当成功安装好后,你会在eclipse等IDE工具的菜单栏发现EclEmma的图形插件:

 

 

当然安装完毕只是良好的开始,接下来的章节我们会讲到究竟如何来使用EclEmma与JUnit的集成测试操作,与如果使用EclEmma生成测试覆盖率报告。

 

二、JUnit4.x+EclEmma集成测试

 

万事俱备后,我们只需深呼吸一下,接下来的工作才是重点。请用一分钟快速的构建好你的项目工程以及测试代码。

由于笔者测试项目使用Maven3.x进行项目构建,如果各位不清楚Maven的基本使用,请参考笔者的Use Maven3.x博文。废话不多说,以下为笔者的项目工程目录结构:

 

 

 

源码如下:

 

package com.test.demo;

/**
 * Hello world!
 *
 */
public class App 
{
    public int age()
    {
        return 18;
    }
    
    public String name()
    {
        return "EclEmma";
    }
}

 

 

 

测试代码如下:

 

package com.test.demo;

import static org.junit.Assert.*;

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

public class AppTest {
	private App app = new App();
	
	@Before
	public void setUp() throws Exception {
	}

	@Test
	public void testAge() {
		assertEquals(10, app.age());
	}

	@Test
	public void testName() {
		assertEquals("EclEmma", app.name());
	}

}

 

既然代码写好了,咱们首先按照管理跑个JUnit:

 

 

值得庆幸的是测试代码全部通过,来吧,喝杯小酒高兴一下呗。

既然测试已经通过,那么我们有必要开始使用EclEmma生成测试覆盖率了,在开始之前,笔者还是有义务进行扫盲,所谓测试覆盖率,客观来说指的是你的测试代码到底覆盖了你项目源代码的多少有效范围。懂吗????

既然动了,我就接着说了,点击项目右键选择Coverage As属性跑Junit你便可以看见你项目的测试覆盖率了:

 

 

通过上图咱们可以很清晰的发现,咱们的测试覆盖率为100%,来吧,再喝一杯。

App一共包含2个方法,如果笔者的测试代码只针对其中一个方法进行测试,而忽略另一个呢?什么效果?你懂得,从理论上来说这种测试覆盖率只有50%左右,到底实际如何呢?观看下图你便知晓:

 

 

上图可以很清晰的发现,测试覆盖率由于笔者仅对App测试了一个方法,那么测试覆盖率必然降低。

最后一点,仔细看下图:

 

 

上图绿色部分代表的是已经测试覆盖通过的代码,红色部分为未测非覆盖的代码,当然还存在一种黄色部分,由于天色已晚,笔者需要养精蓄锐,所以情形不再模拟重现,请自行摸索,出现黄色的原因是因为代码未得到完全执行所致。

 

 三、生成测试覆盖率文档

当我们生成测试覆盖率后,并不希望以截图这么挫的方式发给你的上级,所以我们需要EclEmma的自动生成覆盖率文档来帮助我们交差。

右击Coverage台,选择Export Session到处即可,到处格式多种多样,你可选择常规的HTML格式,XML格式等等,笔者选择HTML格式,因为这样更直观:

 

 

当生成后,我们打开另存的HTML文件,你会清晰的发现测试覆盖率的详细报告:

 

 

提示:

生成测试覆盖率文档后,咱们的代码页将随着文档一起打包,这是既不安全的!

6
1
分享到:
评论
2 楼 gao_xianglong 2013-02-13  
jackyrong 写道
如果是spring3,struts2这些类型的呢,如何用好这个工具?

如果是web项目,大部分人通常选测只测试Service层。要求严格的,会测试Controller层,Junit对Spring为提供很好的扩展测试功能。如果你要说覆盖率都是根据你的单元测试范围进行统计。
1 楼 jackyrong 2013-02-13  
如果是spring3,struts2这些类型的呢,如何用好这个工具?

相关推荐

Global site tag (gtag.js) - Google Analytics