本文内容摘自junit实战,感谢作者的无私奉献。

个人觉得每个开源包的版本对比意义不大,闲来无事,这里就来整理一下好了。本文名为junit3对比junit4,但是我通过这篇博客主要也是想统一的来整理下junit4的一些功能。OK,不废话了,现在我们开始:

1,版本的向前兼容和向后兼容

所有的junit4测试执行器runner都能够执行junit3测试,代码不需要进行任何修改。但是使用junit3的测试执行器想要运行junit4的测试那怎么办呢?

也就是说:junit4不存在向后兼容,但是junit3的向前兼容如何呢?考虑如下情景,我们使用ant或者maven来管理我们的项目,所以这个时候junit3绝对有必要向前兼容junit4系列。

伟大的junit肯定帮我们解决了呢,使用一个适配器就OK,代码如下:

package org.linkinpark.junit.testjunit;

import junit.framework.JUnit4TestAdapter;
import junit.framework.Test;
import junit.framework.TestCase; public class LinkinTest extends TestCase
{ public static Test suite()
{
return new JUnit4TestAdapter(LinkinTest.class);
} }

上面的代码很简单,我们自己写的junit4的测试,只需要初始化一个Junit4TestAdapter类就可以转换成junit3的测试了。

关于源码包结构:

前面的文章我也已经说过了,junit4完美的使用builer设计模式来向后兼容了juint3的版本,查看过junit的源码就知道,以前的junit3的版本所有的测试都放在了junit.framework结构下,新的junit4的版本在原来的基础上,新增org.junit包来包含所有的新的功能。



2,注解取代约定

junit4测试类不需要继承TestCase类,而且测试方法也不需要强制命名成testXXX这种格式。取而代之的就是使用@Test注解就OK了。

@Before,@After,@BeforeClass,@AfterClass也很好的取代了之前的setUp()方法和tearDown()方法。

温馨提示:我们应该养成良好的编码习惯,所以我们在写测试类的时候向后兼容性的来命名。比如Linkin类有一个add()方法,那么我们写测试类的时候就在LinkinTest测试类中写一个testAdd()测试方法。

然后也用@Before注解来修饰setUp(),用@After注解来修饰tearDown()方法,然后用@BeforeClass注解来修饰init()方法,用@AfterClass注解来修饰destroy()方法。



3,忽略测试,异常测试,超时测试

junit4强化了很多junit3的功能,比如忽略测试,异常测试,超时测试等等。

我们可以使用@ingore注解来修饰方法和类,表示跳过测试

我们可以使用@Test注解的一个属性,Except来测试异常

我们可以使用@Test注解的一个属性,timeout来测试超时



4,静态导入

Java5之后增强的静态导入在代码的阅读性上个人觉得反而不怎么舒服了,但是我们还是应该养成良好的习惯,在重复的类方法调用中使用静态导入类方法。

我们使用静态导入org.junit.Assert.*,方便我们直接使用Assert类中的各种断言

我们使用静态导入org.hamcrest.Matchers.*,方法我们使用hamcrest中的各种断言



5,测试集,参数化测试

junit4新增测试集注解,我们可以使用@RunWith注解来选择测试执行器。

我们可以使用Suite类来运行测试集,配合@SuiteClass一起使用

我们可以使用Parameterized类来运行多组测试,配合@Parameters一起使用



6,新增加的断言

junit4新增了几个断言,完美的方便了我们对数组,对双精度值的测试。

比如下面的测试方法:

 public static void assertArrayEquals(Object[] expecteds, Object[] actuals) {
assertArrayEquals(null, expecteds, actuals);
}
public static void assertArrayEquals(String message, Object[] expecteds,
Object[] actuals) throws ArrayComparisonFailure {
internalArrayEquals(message, expecteds, actuals);
}
static public void assertEquals(String message, double expected,
double actual, double delta) {
if (doubleIsDifferent(expected, actual, delta)) {
failNotEquals(message, Double.valueOf(expected), Double.valueOf(actual));
}
}

OK,就先整理到这里,以后我们直接使用junit4.12就够了,过几天我会自己写一套web框架,使用maven来管理项目,除了junit的依赖以外还有hamcrest的依赖,主要是想使用hamcrest的逻辑断言,比如is,not,allOf,anyOf。下面是该这个2依赖的pom文件:

<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.hamcrest</groupId>
<artifactId>hamcrest-junit</artifactId>
<version>2.0.0.0</version>
<scope>test</scope>
</dependency>
</dependencies>

junit3对比junit4的更多相关文章

  1. Junit3与Junit4的区别

    Junit4最大的亮点就是引入了注解(annotation),通过解析注解就可以为测试提供相应的信息,抛弃junit3使用命名约束以及反射机制的方法. /** * 被测试类 */ package co ...

  2. JUnit3 和 JUnit4的区别

    JUnit3 和 JUnit4的区别 1.JUnit 4使用org.junit.*包而JUnit 3.8使用的是junit.Framework.*;为了向后兼容,JUnit4发行版中加入了这两种包. ...

  3. Junit3和Junit4使用区别

    在项目经常会用到单元测试,这里对Junit在开发中的使用标准及使用方法进行简单的介绍. 1.包目录的定义以及相关jar包的添加 2.Junit3和Junit4分别对测试类的编写 所测试的源代码: pa ...

  4. junit3和junit4的使用区别如下

    junit3和junit4的使用区别如下1.在JUnit3中需要继承TestCase类,但在JUnit4中已经不需要继承TestCase2.在JUnit3中需要覆盖TestCase中的setUp和te ...

  5. junit3和junit4的区别总结

    先来看一个例子: 先用junit3来写测试用例,如下: junit3测试结果: 从上面可看出: 1.junit3必须要继承TestCase类 2.每次执行一个测试用例前,junit3执行一遍setup ...

  6. Junit3断言

    在Robotium自动化测试的过程中,发现没有断言的脚本是没有意义的,现整理Junit3和Junit4的断言,供日后查阅. http://junit.org/ Junit3断言API: http:// ...

  7. Java基础学习总结(24)——Java单元测试之JUnit4详解

    Java单元测试之JUnit4详解 与JUnit3不同,JUnit4通过注解的方式来识别测试方法.目前支持的主要注解有: @BeforeClass 全局只会执行一次,而且是第一个运行 @Before  ...

  8. junit基础学习之-junit3和4的区别(4)

    junit3和junit4的使用区别如下 1.在JUnit3中需要继承TestCase类,但在JUnit4中已经不需要继承TestCase 2.在JUnit3中需要覆盖TestCase中的setUp和 ...

  9. 单元测试实战 - Junit测试

    一.对加法函数进行测试 1.实例化被测单元(方法):类名 实例名=new 类名([参数]) 2.调用被测单元,对比预期值和输出值(实际值): 在没有junit测试工具的情况下,我们要进行如下的测试代码 ...

随机推荐

  1. Mac下jenkins用户权限配置错误,导致登录时提示:没有Overall/read权限

    由于初次接触jenkins,于是在搭建好jenkins以后,想要对用户进行管理,于是乎开始在系统管理->configure Global Security里设置用户的权限. 在启用安全-> ...

  2. 2017 年的 人生 hard 模式终于结束了,2018年回归初心

    2017 年的 人生 hard 模式终于结束了,2018年回归初心 2017年对于我个人来讲, 毫不夸张的说 算是近十年来除了高考那一年,最最惊心动魄的一年了,没有之一. >>>开篇 ...

  3. 解决mariadb grant ERROR 1045 (28000): Access denied for user

    下面我们一起来看一篇解决mariadb grant ERROR 1045 (28000): Access denied for user问题,希望文章能够帮助到各位朋友.   用mariadb也有一段 ...

  4. Java 中的函数式编程(Functional Programming):Lambda 初识

    Java 8 发布带来的一个主要特性就是对函数式编程的支持. 而 Lambda 表达式就是一个新的并且很重要的一个概念. 它提供了一个简单并且很简洁的编码方式. 首先从几个简单的 Lambda 表达式 ...

  5. ElasticSearch 集群监控

    要监控哪些 ElasticSearch metrics? Elasticsearch 提供了大量的 Metric,可以帮助您检测到问题的迹象,在遇到节点不可用.out-of-memory.long g ...

  6. 从头开始基于Maven搭建SpringMVC+Mybatis项目(4)

    接上文内容,上一节中的示例中完成了支持分页的商品列表查询功能,不过我们的目标是打造一个商品管理后台,本节中还需要补充添加.修改.删除商品的功能,这些功能依靠Mybatis操作数据库,并通过Spring ...

  7. Python下载、环境变量配置、 模块安装方法

    下载 Windows版官网下载地址:https://www.python.org/downloads/windows/ 类似下图以 installer结尾的文件就是我们需要下载的,位数根据自己的电脑进 ...

  8. 番外篇--Moddule Zero安装

    Moddule Zero 安装 1.2.1 从模板创建 使用ABP和module-zero开始一个新项目最简单的方式是使用启动模板.详细了解请参考启动模板文档. 1.2.2 手动安装 如果你有一个预先 ...

  9. 任务驱动 搭建SSM开发环境

    本篇主要阐述(IntelliJ IDEA + Maven + Spring + Spring MVC + Mybatis)搭建 为什么想要搭建ssm? 近期正好自己有一个小的点子要实现,恰好这学期开了 ...

  10. keepalived VS zookeeper

    转载请标明出处http://www.cnblogs.com/haozhengfei/p/e3db73cb83afb213a3bff43a850d56c4.html keepalived VS zook ...