更多原创测试技术文章同步更新到微信公众号 :三国测,敬请扫码关注个人的微信号,感谢!

 

原文链接:http://www.cnblogs.com/zishi/p/6726664.html

-----如何快速完成单元测试代码

1.      JUnit安装(http://junit.org/junit4/ 目前最新版本是4.12)

注:下面的一些演示图片是按照我本地的4.11版本,差别不大。

在项目上右键- Properties- java build path - Libraries, 点击Add External JARs, 选中刚刚下载的Junit包即可。如图所示:

或者使用以下方式添加:

在项目上右键- Properties- java build path - Libraries, 点击Add Library…,如下图所示:

在弹出窗口中,选中Junit,点击Next按钮继续:

接下来就是选择当前版本,我们目前使用的大版本是Junit 4,可以看到我本地版本为4.11,点击Finish按钮完成:

2.      JaCoCo和EclEmma安装

JaCoCo(Java Code Coverage)是一种分析单元测试覆盖率的工具JaCoCo(Java Code Coverage)就是一种分析单元测试覆盖率的工具,使用它运行单元测试后,可以给出代码中哪些部分被单元测试测到,哪些部分没有没测到,并且给出整个项目的单元测试覆盖情况百分比,看上去一目了然。EclEmma 是基于 JaCoCo 的一个 Eclipse 插件,开发人员可以方便的和其交互。下面简单介绍这两个工具的安装流程。

JaCoco安装:

首先我们访问JaCoco网站:http://www.eclemma.org/jacoco/ 下载最新版本,目前是:http://search.maven.org/remotecontent?filepath=org/jacoco/jacoco/0.7.9/jacoco-0.7.9.zip

压缩包解压后,将其中的Jar包拷贝到Java工程下面存放第三方Jar包的目录。比如在我本地存放在这里D:\tools\luna-withtestng\luna\eclipse\plugins

重新启动Eclipse IDE即可加载JaCoCo插件。接下来我们安装EclEmma:

打开 Eclipse 的软件市场,在其中搜索 EclEmma,找到后完成安装,如下图所示:

直接安装即可。

3.      自动生成单元测试代码(默认Java项目已Ready):

选择需要生成单元测试代码的项目,并在需要生成测试代码的类上点右键 -  New – Other…,如下图所示:

在弹出窗口选择JUnit文件夹,点击展开,选择第一个“JUnit Test Case”,然后点击“Next”:

确认一下选中的Junit版本,其他全部按照默认选项即可:

确认无误,点击“Next”按钮,进入下一步:

此处选中我们需要生成单元测试代码的方法即可,此处我选择了之前写好的两个需要测试的函数,然后点击”Finish”按钮,最终对应生成的单元测试代码如下:

4.      运行单元测试

鼠标选中要运行的代码,EclEmma安装后直接可以点击IDE上方的工具栏,有一个运行按钮,如下图:

注:如果没有安装EclEmma插件,可以通过菜单Run As – Junit test执行单元测试

毫无疑问的,这次运行失败了:

详细的失败log如下:

HelloWorldTest.testAddMethod

testAddMethod(com.test.jacoco.HelloWorldTest)

java.lang.AssertionError: Not yet implemented

at org.junit.Assert.fail(Assert.java:88)

at com.test.jacoco.HelloWorldTest.testAddMethod(HelloWorldTest.java:19)

at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

………..

从上方的抛出的信息中,可以看到我们生成的断言中指定的消息“Not yet implemented”,另外,失败原因是我们默认生成的是一个fail断言,我们看一下关于fail断言的描述:

static void

fail()

Fails a test with no message.

static void

fail(String message)

Fails a test with the given message.

所以非常清楚的知道,这个断言的用途就是为了使单元测试立即失败,它其实并没有测试到我们的具体代码。

接下来我们给他们分别添加具体的测试代码和断言,如下图所示:

代码完成之后,继续调用Run As – Junit test,运行,这次毫无疑问运行成功了,看下图:

这样我们就完成了两个函数的单元测试代码覆盖。这里我们又用到了两个常用断言:assertNotNull()
assertEquals
()。Junit提供很多断言方法给我们,正确使用这些断言可以帮助我们确定被测试的函数是否按照预期的效果正常工作了,非常方便。我们在本文的最后部分提供了附录文档,详细介绍了Junit的全部断言目录,有兴趣的同学可以继续查看。

5.      查看单元测试覆盖率

JaCoCo和EclEmma安装完成后增加了以下特性:

1、未覆盖代码标记为红色,如下图:

2、已覆盖代码会标记为绿色,如图所示:

3、当然也有部分覆盖的情况,如图所示(还有可能是因为代码未完全执行):

4、在Eclipse下方的状态栏窗口,增加了一栏“Coverage”,点击可以显示详细的代码覆盖率:

5、颜色也可以在Eclipse中自定义设置:

以上是本次插件的全部介绍。我们通过这些工具可以快速生成单元测试代码,并利用分析工具将单元测试覆盖率尽量提高,这样我们对自己开发的代码更有信心了。当然,我们在这里并不是为了单纯的追求这个数字,在增加单元测试覆盖率的诱导下,我们重新理清了测试的步骤,写出了更有意义、更全面的单元测试。而且根据单元测试分析工具给的反馈,我们还发现了先前没有想到的情形。因此,单元测试的覆盖率并不只是一个为了取悦管理者的数据,它实实在在地帮助我们改善了代码的质量,增加了我们对所编写代码的信心。

6.  附录文档:Junit Assert目录

Junit Assert目录

static void

assertArrayEquals(boolean[] expecteds, boolean[] actuals)

Asserts that two boolean arrays are equal.

static void

assertArrayEquals(byte[] expecteds, byte[] actuals)

Asserts that two byte arrays are equal.

static void

assertArrayEquals(char[] expecteds, char[] actuals)

Asserts that two char arrays are equal.

static void

assertArrayEquals(double[] expecteds, double[] actuals,
double delta)


Asserts that two double arrays are equal.

static void

assertArrayEquals(float[] expecteds, float[] actuals,
float delta)


Asserts that two float arrays are equal.

static void

assertArrayEquals(int[] expecteds, int[] actuals)

Asserts that two int arrays are equal.

static void

assertArrayEquals(long[] expecteds, long[] actuals)

Asserts that two long arrays are equal.

static void

assertArrayEquals(Object[] expecteds, Object[] actuals)

Asserts that two object arrays are equal.

static void

assertArrayEquals(short[] expecteds, short[] actuals)

Asserts that two short arrays are equal.

static void

assertArrayEquals(String message, boolean[] expecteds, boolean[]
actuals)


Asserts that two boolean arrays are equal.

static void

assertArrayEquals(String message, byte[] expecteds, byte[]
actuals)


Asserts that two byte arrays are equal.

static void

assertArrayEquals(String message, char[] expecteds, char[]
actuals)


Asserts that two char arrays are equal.

static void

assertArrayEquals(String message, double[] expecteds, double[]
actuals, double delta)


Asserts that two double arrays are equal.

static void

assertArrayEquals(String message, float[] expecteds, float[]
actuals, float delta)


Asserts that two float arrays are equal.

static void

assertArrayEquals(String message, int[] expecteds, int[] actuals)

Asserts that two int arrays are equal.

static void

assertArrayEquals(String message, long[] expecteds, long[]
actuals)


Asserts that two long arrays are equal.

static void

assertArrayEquals(String message, Object[] expecteds, Object[] actuals)

Asserts that two object arrays are equal.

static void

assertArrayEquals(String message, short[] expecteds, short[]
actuals)


Asserts that two short arrays are equal.

static void

assertEquals(double expected, double actual)

Deprecated. Use assertEquals(double expected, double actual, double
delta)
instead

static void

assertEquals(double expected, double actual, double
delta)


Asserts that two doubles are equal to within a positive delta.

static void

assertEquals(float expected, float actual, float
delta)


Asserts that two floats are equal to within a positive delta.

static void

assertEquals(long expected, long actual)

Asserts that two longs are equal.

static void

assertEquals(Object[] expecteds, Object[] actuals)

Deprecated. use assertArrayEquals

static void

assertEquals(Object expected, Object actual)

Asserts that two objects are equal.

static void

assertEquals(String message, double expected, double actual)

Deprecated. Use assertEquals(String message, double expected, double
actual, double delta)
instead

static void

assertEquals(String message, double expected, double actual,
double delta)


Asserts that two doubles are equal to within a positive delta.

static void

assertEquals(String message, float expected, float actual,
float delta)


Asserts that two floats are equal to within a positive delta.

static void

assertEquals(String message, long expected, long actual)

Asserts that two longs are equal.

static void

assertEquals(String message, Object[] expecteds, Object[] actuals)

Deprecated. use assertArrayEquals

static void

assertEquals(String message, Object expected, Object actual)

Asserts that two objects are equal.

static void

assertFalse(boolean condition)

Asserts that a condition is false.

static void

assertFalse(String message, boolean condition)

Asserts that a condition is false.

static void

assertNotEquals(double unexpected, double actual, double
delta)


Asserts that two doubles are not equal to within a positive delta.

static void

assertNotEquals(float unexpected, float actual, float delta)

Asserts that two floats are not equal to within a positive delta.

static void

assertNotEquals(long unexpected, long actual)

Asserts that two longs are not equals.

static void

assertNotEquals(Object unexpected, Object actual)

Asserts that two objects are not equals.

static void

assertNotEquals(String message, double unexpected, double
actual, double delta)


Asserts that two doubles are not equal to within a positive delta.

static void

assertNotEquals(String message, float unexpected, float actual,
float delta)


Asserts that two floats are not equal to within a positive delta.

static void

assertNotEquals(String message, long unexpected, long actual)

Asserts that two longs are not equals.

static void

assertNotEquals(String message, Object unexpected, Object actual)

Asserts that two objects are not equals.

static void

assertNotNull(Object object)

Asserts that an object isn't null.

static void

assertNotNull(String message, Object object)

Asserts that an object isn't null.

static void

assertNotSame(Object unexpected, Object actual)

Asserts that two objects do not refer to the same object.

static void

assertNotSame(String message, Object unexpected, Object actual)

Asserts that two objects do not refer to the same object.

static void

assertNull(Object object)

Asserts that an object is null.

static void

assertNull(String message, Object object)

Asserts that an object is null.

static void

assertSame(Object expected, Object actual)

Asserts that two objects refer to the same object.

static void

assertSame(String message, Object expected, Object actual)

Asserts that two objects refer to the same object.

static

<T> void

assertThat(String reason, T actual, Matcher<? super T> matcher)

Asserts that actual satisfies the condition specified by matcher.

static

<T> void

assertThat(T actual, Matcher<? super T> matcher)

Asserts that actual satisfies the condition specified by matcher.

static void

assertTrue(boolean condition)

Asserts that a condition is true.

static void

assertTrue(String message, boolean condition)

Asserts that a condition is true.

static void

fail()

Fails a test with no message.

static void

fail(String message)

Fails a test with the given message.

感谢阅读,作者原创技术文章,转载请注明出处

推荐相关阅读:

单元测试系列:Mock工具之Mockito实战

单元测试系列:JUnit单元测试规范

单元测试系列:Mock工具Jmockit使用介绍

单元测试系列:如何使用JUnit+JaCoCo+EclEmma完成单元测试的更多相关文章

  1. 单元测试系列之三:JUnit单元测试规范

    更多原创测试技术文章同步更新到微信公众号 :三国测,敬请扫码关注个人的微信号,感谢! 原文链接:http://www.cnblogs.com/zishi/p/6762032.html Junit测试代 ...

  2. 单元测试系列之一:如何使用JUnit、JaCoCo和EclEmma提高单元测试覆盖率

    更多原创测试技术文章同步更新到微信公众号 :三国测,敬请扫码关注个人的微信号,感谢!   原文链接:http://www.cnblogs.com/zishi/p/6726664.html -----如 ...

  3. 单元测试系列:JUnit单元测试规范

    更多原创测试技术文章同步更新到微信公众号 :三国测,敬请扫码关注个人的微信号,感谢! 原文链接:http://www.cnblogs.com/zishi/p/6762032.html Junit测试代 ...

  4. 单元测试系列:Mock工具之Mockito实战

    更多原创测试技术文章同步更新到微信公众号 :三国测,敬请扫码关注个人的微信号,感谢! 原文链接:http://www.cnblogs.com/zishi/p/6780719.html 在实际项目中写单 ...

  5. 单元测试系列:Mock工具Jmockit使用介绍

    更多原创测试技术文章同步更新到微信公众号 :三国测,敬请扫码关注个人的微信号,感谢! 原文链接:http://www.cnblogs.com/zishi/p/6760272.html Mock工具Jm ...

  6. 单元测试系列之五:Mock工具之Mockito实战

    更多原创测试技术文章同步更新到微信公众号 :三国测,敬请扫码关注个人的微信号,感谢! 原文链接:http://www.cnblogs.com/zishi/p/6780719.html 在实际项目中写单 ...

  7. 单元测试系列之十一:Jmockit之mock特性详解

    本文是Jmockit学习过程中,根据官网所列的工具特性进行解读. 1.调用次数约束(Invocation count constraints) 可以通过调用计数约束来指定预期和/或允许匹配给定期望的调 ...

  8. 单元测试系列之十:Sonar 常用代码规则整理(二)

    摘要:帮助公司部署了一套sonar平台,经过一段时间运行,发现有一些问题出现频率很高,因此有必要将这些问题进行整理总结和分析,避免再次出现类似问题. 作者原创技术文章,转载请注明出处 ======== ...

  9. 单元测试系列之九:Sonar 常用代码规则整理(一)

    更多原创测试技术文章同步更新到微信公众号 :三国测,敬请扫码关注个人的微信号,感谢! 摘要:公司部署了一套sonar,经过一段时间运行,发现有一些问题出现频率很高,因此有必要将这些问题进行整理总结和分 ...

随机推荐

  1. Vijos P1103 校门外的树【线段树,模拟】

    校门外的树 描述 某校大门外长度为L的马路上有一排树,每两棵相邻的树之间的间隔都是1米.我们可以把马路看成一个数轴,马路的一端在数轴0的位置,另一端在L的位置:数轴上的每个整数点,即0,1,2,……, ...

  2. BZOJ3676: [Apio2014]回文串(回文树)

    题目:http://www.lydsy.com/JudgeOnline/problem.php?id=3676 这叫模版题TAT #include<cstring> #include< ...

  3. struts中用kindeditor实现的图片上传并且显示在页面上

    做公司网站的时候由于需要在内容属性中加入图片,所以就有了这个问题,本来一开始找几篇文章看都是讲修改kindeditor/jsp/file_manager_json.jsp和upload_json.js ...

  4. 平安E行销扫脸打卡/人寿国寿e店云参会钉钉考勤,原来这么轻易被破解!

    由于近几年人们的保险意识越来越强,身边有很多朋友都在中国人寿,中国平安等保险公司上班薪水高,工作自由,又可以学习很多保险理财的知识,每天早会个2~3个小时,剩下的基本都是自己的时间,(vx:99508 ...

  5. 从零开始学习前端开发 — 15、CSS3过渡、动画

    一.css3过渡 语法: transition: 过渡属性 过渡时间 延迟时间 过渡方式; 1.过渡属性(transition-property) 取值:all 所有发生变化的css属性都添加过渡 e ...

  6. WEBZIP为什么打不开网页

    先试三个办法 一.打开IE,点工具,点internet选项,点高级,点恢复默认设置,点保存,退出,重新打开IE 二.打开IE,刷新五次以上 三.打开IE,点工具,点internet选项,点删除文件,点 ...

  7. 什么是redis,redis能做什么,redis应用场景

    Redis是一个key-value存储系统.Redis的出现,很大程度补偿了memcached这类key/value存储的不足,在部分场合可以对关系数据库起到很好的补充作用.这篇文章小编为大家分享了在 ...

  8. DEDECMS点击主栏目默认显示第一个子栏目列表的方法

    本文实例讲述了DEDECMS点击主栏目默认显示第一个子栏目列表的方法.分享给大家供大家参考.具体分析如下: 今天公司有个需求是,点击导航上的父栏目进去默认显示第一个子栏目的列表,以下是具体实现方法,可 ...

  9. Oracle问题之ORA-12560TNS:协议适配器错误

    Oracle问题之ORA-12560TNS:协议适配器错误 一.造成ORA-12560: TNS: 协议适配器错误的问题的原因有三个: 1.监听服务没有起起来.windows平台个一如下操作:开始-- ...

  10. Spring MVC 数据校验@Valid

    先看看几个关键词 @Valid @Pattern @NotNull @NotBlank @Size BindingResult 这些就是Spring MVC的数据校验的几个注解. 那怎么用呢?往下看 ...