JUnit & JMockit单元测试
JUnit&JMockit单元测试总结
1.JUnit简介
Java单元测试框架业内应用较多的是JUnit,它由Kent Beck和Erich Gamma建立,逐渐成为源于Kent Beck的sUnit的xUnit家族中最为成功的一个。 JUnit有它自己的JUnit扩展生态圈。多数Java的开发环境都已经集成了JUnit作为单元测试的工具。
目前JUnit主流版本有3.x,4.x和5.x,目前继续推荐使用4.x版本,各个IDE中也自动集成了它。
2.JMockit简介
基于Junit单元测试的框架有很多,包括EasyMock、JMock、mockito、JMockit等。Mock框架也能进行stub的测试方法。但通过各种测试框架的对比,JMockit对于目前流行的测试方法全部支持,功能强大。因此选择JMockit作为Junit单元测试的框架。
JMockit是帮助创建mock对象的工具,它基于Java开发,在Java测试与开发环境中有不可比拟的优势,更重要的是,它大大简化了虚拟对象的使用。
3.Maven集成单元测试工具
<!‐‐版本号‐‐>
<properties>
<junit.versioin>4.12</junit.versioin>
<jmockit.version>1.34</jmockit.version>
</properties>
<!‐‐依赖‐‐>
<dependencies>
<dependency>
<groupId>org.jmockit</groupId>
<artifactId>jmockit</artifactId>
<version>${jmockit.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>${junit.versioin}</version>
<scope>test</scope>
</dependency>
</dependencies>
4.单元测试的使用
JUnit4基础语法
Junit4.x区别与之前的版本,无需显示的声明测试类继承于TestCase。通过使用Junit annotation进行编写单元测试用例。
@Test: 标识测试方法
@Ignore: 被忽略的测试方法或测试类
@Before: 初始化方法,在任何一个测试执行之前必须执行的代码
@After: 释放资源,在任何测试执行之后需要进行的收尾工作。在每个测试方法执行之后执行一次,该annotation只能修饰public void 方法;
@BeforeClass: 针对所有测试,只执行一次,且必须为public static void;一般用于初始化必要的消耗较大的
资源,例如数据库连接等@AfterClass: 针对所有测试,将会在所有测试方法执行结束后执行一次,且必须为public static void;
@Parameters: 进行单元测试的时候,通常一个方法需要好几个case进行测试,Junit提供参数化便于我们对方法进行多种参数的组合测试
4.9之后引入@Rule和@ClassRule,本质上是对@BeforeClass, @AfterClass, @Before, @After等的另一种实现,只是功能上更灵活多变,易于扩展,且方便在类和项目之间共享。
两个注解使用时需要放在实现了TestRule接口的Rule变量或返回Rule的方法之上,且修饰符都必须为public。@Rule为变量或方法级注解,每个测试方法执行时都会调用被该注解修饰的Rule;@ClassRule为类级注解,执行单个测试类时只会调用一次被该注解修饰的Rule。
JMockit基础语法
JMockit的测试更多是基于注解来实现的。Jmockit中常用的注解有:
@Mocked:被修饰的对象将会被Mock,对应的类和实例都会受影响(同一个测试用例中)
@Mocked是针对类型的,可用于测试类成员mock field与参数用例参数mock parameter。对mock field的注解作用于整个测试类,而对mock parameter的注解只针对该测试用例。@Injectable:仅Mock被修饰的对象
@Injectable是针对单个实例的,可用于测试类成员mock field与参数用例参数mock parameter。对mock field的注解作用于整个测试类,而对mock parameter的注解只针对该测试用例。@Capturing:可以mock接口以及其所有的实现类
@Capturing 标识一个被Mock的对象,从该对象派生的子类也被Mock了。可以通过maxInstances方法来指定最大有多少层子类也被mock。当然和@Mocked以及@Injectable一样,均可用作class field和测试用例的参数的注解。同时,它是针对类型的。@Tested:指定被测试的对象
@Tested标识一个被测对象的实例。通过@Tested标签标识的被测对象实例,将会在测试方法执行之前被初始化。@Mock:MockUp模式中,指定被Fake的方法
JUnit & JMockit单元测试的更多相关文章
- java如何使用JUnit进行单元测试
注:所有内容都是在eclipse上实现,关于eclipse的安装和jdk的安装配置,请看:http://www.cnblogs.com/fench/p/5914827.html 单元测试是什么? 百度 ...
- JUnit 4 单元测试
Individual Project ——JUnit 4 单元测试 学习到JUnit单元测试,我拿来测试之前写过的一个计算器(两个依存类:Calc.java CalcFunction.java).代码 ...
- Android之如何使用JUnit进行单元测试
转的:http://www.blogjava.net/qileilove/archive/2014/05/19/413824.html Android中如何使用JUnit进行单元测试 在我们日常开发a ...
- 使用Spring配合Junit进行单元测试的总结
最近公司的项目和自己的项目中都用到了spring集成junit进行单元测试,总结一下几种基本的用法: 1.直接对spring中注入的bean进行测试(以DAO为例): 在测试类上添加@RunWith注 ...
- Spring(3)—— Junit框架单元测试
Junit主要用于单元测试,即白盒测试.它是一个开源的由JAVA开发的一个用于测试的框架. Junit的几个基本概念:TestCase,TestSuite,TestFixtrue TestCase:代 ...
- JUnit + Mockito 单元测试(二)
摘自: http://blog.csdn.net/zhangxin09/article/details/42422643 版权声明:本文为博主原创文章,未经博主允许不得转载. 目录(?)[-] 入门 ...
- spring junit 做单元测试,报 Failed to load ApplicationContext 错误
spring junit 做单元测试,报 Failed to load ApplicationContext 错误. 查找了好一会,最后发现.@ContextConfiguration(locatio ...
- 使用 JUnit 进行单元测试 - 教程
tanyuanji@126.com 版本历史 JUnit 该教程主要讲解 JUnit 4.x 版本的使用,以及如何在Eclipse IDE 中如何使用JUnit 目录 tanyuanji@126. ...
- JUnit + Mockito 单元测试(二)(good)
import org.junit.Test; import org.mockito.Matchers; import org.mockito.Mockito; import java.util.Lis ...
随机推荐
- 修改vscode的文件,对应的磁盘文件不改变
两种解决办法: 首先:修改VSCode默认配置文件,点击左下角设置标志图 -> 设置,出来了设置相关的东西,搜索 files.autoSave 第一种:把"files.autoSave ...
- 更改Android studio中SDK,AVD的默认路径
对于大部分首次下载android studio开发android的人来说, 由于Android Studio将会默认把SDK,AVD下载到我们的C盘,造成大量内存的占用,那么如何更改SDK,AVD的路 ...
- 如何用Jpype创建HashMap和ArrayList
近期在Python中使用java语言的时候有涉及到如何创建HashMap和ArrayList等容器,最开始的疑惑是,java里面的容器是有泛型做类型检测的,而在python中却没有泛型这个说法,那么如 ...
- 常用注解解析(因为不太明白@component和@configuration写了)
1.@controller 控制器(注入服务) 用于标注控制层,相当于struts中的action层 2.@service 服务(注入dao) 用于标注服务层,主要用来进行业务的逻辑处理 3.@rep ...
- 冒泡排序(C语言)
# include<stdio.h> int main(void) { int arr[10]={5,4,7,9,2,3,1,6,10,8}; //定义一个位排序的数组 int i; // ...
- [C]表达式结合规律和运算符优先级
表达式结合规律 如果运算符具有相同的优先级(precedence)有些表达式的结合方式是从左往右,有些则是从右往左结合的(例如赋值运算符): 表达式 结合律 组合方式 a/b%c 从左往右 (a/b) ...
- 信号处理函数陷阱:调用malloc导致死锁[转]
概览 因malloc是加锁的,上网了解的相关信息,额外了解到信号处理规范使用,mark 正文 在执行malloc的过程中,跳转到了信号处理函数中.而信号处理函数在调用某个系统api时,内部又调用了ma ...
- Java之Arrays类
Arrays概述 java.util.Arrays 此类包含用来操作数组的各种方法,比如排序和搜索等.其所有方法均为静态方法,调用起来非常简单. 常用方法 public static String t ...
- Umi + Dva + Antd的React项目实践
记录一下最近项目所用到的技术React + Dva + Antd + umi ,以免忘记.之前没有用过它们其中一个,也是慢慢摸索,了解数据整个流程. 先了解下概念 React 不多说,3大框架之一: ...
- 品Spring:注解终于“成功上位”
历史还是抛弃了XML,当它逐渐尝到注解的甜头之后. 尤其是在Spring帝国,到处充满着注解的气息. 注解从一个提供附属信息的“门客”,蜕变为颇具中流砥柱的“君侯”. 注解成功登上了帝国的舞台,定会像 ...