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单元测试的更多相关文章

  1. java如何使用JUnit进行单元测试

    注:所有内容都是在eclipse上实现,关于eclipse的安装和jdk的安装配置,请看:http://www.cnblogs.com/fench/p/5914827.html 单元测试是什么? 百度 ...

  2. JUnit 4 单元测试

    Individual Project ——JUnit 4 单元测试 学习到JUnit单元测试,我拿来测试之前写过的一个计算器(两个依存类:Calc.java CalcFunction.java).代码 ...

  3. Android之如何使用JUnit进行单元测试

    转的:http://www.blogjava.net/qileilove/archive/2014/05/19/413824.html Android中如何使用JUnit进行单元测试 在我们日常开发a ...

  4. 使用Spring配合Junit进行单元测试的总结

    最近公司的项目和自己的项目中都用到了spring集成junit进行单元测试,总结一下几种基本的用法: 1.直接对spring中注入的bean进行测试(以DAO为例): 在测试类上添加@RunWith注 ...

  5. Spring(3)—— Junit框架单元测试

    Junit主要用于单元测试,即白盒测试.它是一个开源的由JAVA开发的一个用于测试的框架. Junit的几个基本概念:TestCase,TestSuite,TestFixtrue TestCase:代 ...

  6. JUnit + Mockito 单元测试(二)

    摘自: http://blog.csdn.net/zhangxin09/article/details/42422643 版权声明:本文为博主原创文章,未经博主允许不得转载. 目录(?)[-] 入门 ...

  7. spring junit 做单元测试,报 Failed to load ApplicationContext 错误

    spring junit 做单元测试,报 Failed to load ApplicationContext 错误. 查找了好一会,最后发现.@ContextConfiguration(locatio ...

  8. 使用 JUnit 进行单元测试 - 教程

    tanyuanji@126.com 版本历史 JUnit 该教程主要讲解 JUnit 4.x 版本的使用,以及如何在Eclipse IDE 中如何使用JUnit   目录 tanyuanji@126. ...

  9. JUnit + Mockito 单元测试(二)(good)

    import org.junit.Test; import org.mockito.Matchers; import org.mockito.Mockito; import java.util.Lis ...

随机推荐

  1. Nginx 入门学习

    什么是 Nginx Nginx 是一款轻量级高性能的web 和 反向代理服务器,类似于Apache,也是一个 IMAP/POP3/SMTP (电子邮件)代理服务器.由俄罗斯程序设计师 Igor Sys ...

  2. vue - Error: Can't resolve '@/assets/img/github.svg (vue-cli3.0,无法解析.svg图片,已解决)

    用vue脚手架(vue-cli3.0)生成的目录,无法解析.svg图片的问题 <img src="@/assets/img/github.svg" alt="git ...

  3. tensorflow 神经网络模型概览;熟悉Eager 模式;

    典型神经网络模型:(图片来源:https://github.com/madalinabuzau/tensorflow-eager-tutorials) 保持更新,更多内容请关注 cnblogs.com ...

  4. RTX5的汽车级,工业级,医疗和铁路安全认证已经通过,证书已颁发

    说明: 1.当前RTX5的教程已经在制作中,使用CMSIS-RTOS V2封装层,含FreeRTOS,配套V7,V6和V5板子​. 2.我们各种开发板和模块的资料汇总贴,搞了个cnblogs,临时先用 ...

  5. ROS基础-基本概念和简单工具(1)

    1.什么是ROS? Robot operating System ,简单说机器人操作系统,弱耦合的分布式进程框架,通过进程间的消息传递和管理.实现硬件抽象和设备控制. 2.节点(node) node ...

  6. PostgreSQL数据库一些tricks

    PostgreSQL自带Pgadmin客户端,可用于访问本地和远程PG库,一些tricks如下: 1.联合查询 SELECT * FROM table1 INNER JOIN table2 ON ta ...

  7. Quartz.NET总结(三)如配置jobs

    前两篇文章,已经介绍了Quartz.NET的使用和Cron表达式表达式的写法,今天说一说Quartz的配置,Quartz相关的配置有三个quartz.config.quartz_jobs.xml.lo ...

  8. .Net Core 3.0后台使用httpclient请求网络网页和图片_使用Core3.0做一个简单的代理服务器

    目标:使用.net core最新的3.0版本,借助httpclient和本机的host域名代理,实现网络请求转发和内容获取,最终显示到目标客户端! 背景:本人在core领域是个新手,对core的使用不 ...

  9. C# Xamarin 数据绑定入门基础

    目录 关于数据绑定 视图-视图绑定 绑定模式 简单的集合绑定 C# Xamarin 数据绑定入门基础 关于数据绑定 Xamarin 单向.双向绑定 Xaml绑定 C#代码绑定 在此之前,几段 伪代码 ...

  10. Java生鲜电商平台-缓存架构实战

    Java生鲜电商平台-缓存架构实战 说明:在Java生鲜电商中,缓存起到了非常重要的作用,目前整个项目中才用的是redis做分布式缓存. 缓存集群 缓存集群存在的问题 1.热key 缓存集群中的某个k ...