JUnit和Mockito合作

这次,我想对测试框架Mockito进行概述。 毫无疑问,这是用于测试Java代码的最受欢迎的工具之一。 我已经对Mockito的竞争对手EasyMock进行了概述。 这篇文章将基于有关EasyMock的示例应用程序。 我的意思是代表咖啡机功能的类。

用Mockito准备测试

通常,我将使用Maven进行项目设置。 因此,要使Mockito在项目中可用,我需要在pom.xml文件中添加以下依赖项:

<dependencies><dependency><groupid>org.mockito</groupid><artifactid>mockito-all</artifactid><version>1.9.5</version></dependency><dependency><groupid>junit</groupid><artifactid>junit</artifactid><version>4.11</version></dependency></dependencies>

请注意,Mockito的正常功能不需要JUnit,可以用相同的方法使用TestNG来代替它。 因此,您可以根据自己的决定使用JUnit或TestNG。

让我们进一步。 如前所述,本文中的所有测试都是针对EasyMock帖子中的示例应用程序编写的。 您可以从此处仅阅读“应用程序代码”部分。 这足以了解测试的主题。

Mockito和JUnit测试

我想从关于Mockito框架几句话开始本节。 毫无疑问,借助Mockito,您可以完成测试中希望做的所有事情。 您可以在清除API的帮助下创建模拟,存根,进行验证以及所有这些操作。
现在该看看使用Mockito进行单元测试的样子了。

import static org.junit.Assert.*;
import static org.mockito.Mockito.*;import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mock;
import org.mockito.runners.MockitoJUnitRunner;import com.app.data.Portion;
import com.app.exceptions.NotEnoughException;
import com.app.mechanism.CoffeeMachine;
import com.app.mechanism.interfaces.ICoffeeMachine;
import com.app.mechanism.interfaces.IContainer;@RunWith(MockitoJUnitRunner.class)
public class CoffeeMachineTest {ICoffeeMachine coffeeMachine;@MockIContainer coffeeContainer;@MockIContainer waterContainer;@Beforepublic void setUp() {coffeeMachine = new CoffeeMachine(coffeeContainer, waterContainer);}@Afterpublic void tearDown() {coffeeContainer = null;waterContainer = null;coffeeMachine = null;		}@Testpublic void testMakeCoffe() throws NotEnoughException {when(coffeeContainer.getPortion(Portion.LARGE)).thenReturn(true);when(waterContainer.getPortion(Portion.LARGE)).thenReturn(true);assertTrue(coffeeMachine.makeCoffee(Portion.LARGE));}@Testpublic void testNotEnoughException() throws NotEnoughException {when(coffeeContainer.getPortion(Portion.SMALL)).thenReturn(false);when(waterContainer.getPortion(Portion.SMALL)).thenReturn(true);assertFalse(coffeeMachine.makeCoffee(Portion.SMALL));}}

我将用几句话解释一下测试班里发生了什么。 我正在测试咖啡机,为此,我为咖啡容器和水容器创建了模拟。 进一步在测试中,我将为模拟定义一些行为,并根据这台咖啡机执行预期的操作。

...@MockIContainer coffeeContainer;@MockIContainer waterContainer;
...

在上面的代码中,我声明了两个模拟。 以这种方式创建模拟需要将@RunWith(MockitoJUnitRunner.class)批注应用于测试类。 或者,您可以使用MockitoAnnotations.initMocks(testClass); 在运行任何测试之前,例如,您可以将此代码段放入@Before注释的方法中。

...
when(coffeeContainer.getPortion(Portion.LARGE)).thenReturn(true);
...

在Mockito中定义模拟的行为非常方便。 您可以指定在调用特定方法后应返回的内容。 注意,我在测试类中进行了几次静态导入

摘要

Mockito框架征服了我的心。 这非常方便,其API清晰,使用简便。 Mockito包含许多在单元测试开发过程中可能需要的方法。 当然,一篇文章太小而无法描述Mockito的所有功能,因此我建议您使用官方文档的跟随链接进行更深入的研究。

参考: Fruzenshtein的便笺博客中来自JCG合作伙伴 Alexey Zvolinskiy的JUnit和Mockito合作 。

翻译自: https://www.javacodegeeks.com/2013/05/junit-and-mockito-cooperation.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/368903.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

发现2017年最好的CSS框架

如今&#xff0c;无数的框架出现在定期而少数人喜欢自助&#xff0c;Foundation和angular.js主宰了整个世界的发展。CSS代表用于描述HTML&#xff08;或XML&#xff09;文档表示的样式表语言。一个框架被定义为一个包&#xff0c;它由一组结构化的文件和标准化代码&#xff08;…

go基础编程 day-2

Go的常亮 关键字&#xff1a; Const Go常亮的多个定义&#xff1a; // 定义常亮的关键字 const// 定义多个常亮 const(PI 3.14const1 "1"const2 2const3 3 ) 全局变量的声明与赋值&#xff1a; var (name "wyc"name1 1name2 2name3 3 ) 一般类型…

教你开发jQuery插件(转)

教你开发jQuery插件&#xff08;转&#xff09; 阅读目录 基本方法支持链式调用让插件接收参数面向对象的插件开发关于命名空间关于变量定义及命名压缩的好处工具GitHub Service Hook原文&#xff1a;http://www.cnblogs.com/Wayou/p/jquery_plugin_tutorial.html 要说jQuery 最…

gulp 常用插件汇总

2017-07-26更新&#xff1a;图片压缩插件使用gulp-smushit&#xff0c;gulp-smushit压缩率比较大&#xff0c;gulp-imagemin 图片压缩插件压缩率不明显。 见下图压缩率&#xff1a; 1、gulp安装 参照gulp官网进行安装&#xff1a;http://www.gulpjs.com.cn/docs/getting-start…

Nmap介绍

1.Nmap介绍 Nmap用于列举网络主机清单、管理服务升级调度、监控主机或服务运行状况。Nmap可以检测目标机是否在线、端口开放情况、侦测运行的服务类型及版本信息、侦测操作系统与设备类型等信息。 1.1 Zenmap Zenmap是Nmap官方提供的图形界面&#xff0c;通常随Nmap的安装包发布…

SD/MMC相关寄存器的介绍

1.SD卡内部架构 在熟悉SD/MMC相关寄存器之前&#xff0c;我们先来看看SD卡的内部架构是怎么样的&#xff0c;如下图所示&#xff1a; 2.SD/MMC相关寄存器的介绍 从上图中总结出&#xff1a;SD卡内部有7个寄存器. 一、OCR,CID,CSD和SCR寄存器保存卡的配置信息; 二、RCA寄存器保存…

apche 禁止运行php,学习猿地-apache如何禁止执行php

apache禁止执行php的方法&#xff1a;首先新建一个“.htaccess”文件&#xff1b;然后复制代码内容“Order allow,deny”到“.htaccess”文件中&#xff1b;最后将该文件直接放到网站根目录里即可。apache禁止执行php的方法&#xff1a;第一种禁止上传目录运行php的方法如果你用…

Apache Camel 2.11发布

上周Apache Camel 2.11发布了。 这篇博客文章总结了最引人注目的新功能和改进。 有关详细说明&#xff0c;请参见Camel 2.11发行说明 。 1&#xff09;新组件 与往常一样&#xff0c;每个新发行版都包含许多新组件&#xff0c;这些组件由我们庞大的用户群贡献。 谢谢你们。 例…

linux分区满了,如何进行扩容

转自&#xff1a;https://blog.csdn.net/valage/article/details/73332147 图片中可以看到挂载点“/”的利用率移到100%&#xff0c;空间不够&#xff0c;所以要对其进行分区。 1. 先进入虚拟机设置里增大磁盘空间 注意&#xff1a;将25改成50&#xff0c;以扩大空间。这里…

DIV CSS布局-固定页面开度布局

DIV CSS布局中主要CSS属性介绍&#xff1a; Float: Float属性是DIV CSS布局中最基本也是最常用的属性&#xff0c;用于实现多列功能&#xff0c;我们知道<div>标签默认一行只能显示一个&#xff0c;而使用Float属性可以实现一行显示多个div的功能&#xff0c;最直接解释…

纯 CSS 实现波浪效果!

一直以来&#xff0c;使用纯 CSS 实现波浪效果都是十分困难的。 因为实现波浪的曲线需要借助贝塞尔曲线。 而使用纯 CSS 的方式&#xff0c;实现贝塞尔曲线&#xff0c;额&#xff0c;暂时是没有很好的方法。 当然&#xff0c;借助其他力量&#xff08;SVG、CANVAS&#xff09…

Mysql 数据库(三)

一、数值类型 1、整数类型&#xff1a;应用场景&#xff0c;存放年龄&#xff0c;等级&#xff0c;id或者各种号码等等 TINYINT&#xff1a;1个字节存放&#xff0c;有符号范围&#xff1a;-128到127&#xff0c;没有符号范围&#xff1a;0&#xff0c;255 。 SMALLINT&#xf…

Thonny -- 简洁的 python 轻量级 IDE

Thonny目前是 树莓派 上 默认的 Python 开发环境。 该 IDE 是 Institute of Computer Science of University of Tartu &#xff08;爱沙尼亚 的 塔尔图大学 计算机科学院&#xff09;开发的。 最近 yvivid 也体验了一下 Thonny 的开发环境&#xff0c;网站地址为 http://thonn…

如何造成内存泄漏

这将是一个相当邪恶的职位-当您确实希望使某人的生活陷入困境时&#xff0c;您将在谷歌上搜索。 在Java开发领域&#xff0c;内存泄漏只是您在这种情况下会引入的错误类型。 为您的受害者保证几天甚至几周的办公室不眠之夜。 我们将在这篇文章中描述两次泄漏。 两者都很容易理…

javascript 之异常处理try catch finally--05

语法结构 try catch finally是ECMAScript-262 第三版提供异常处理机制的标准&#xff0c;语法结构如下&#xff1a; 1 try{ 2 //可能会发生的错误代码 3 } 4 catch(error){ 5 //错误处理 6 }finally{ 7 //无论是否有异常都会执行 8 } 语法与大多数语言一样 如java .net&#x…

CSS实现文本周围插入符号

CSS实现文本周围插入符号的方案 本文要讨论的是如何在文本的周围插入图标&#xff0c;怎么样控制它们之间的位置关系&#xff0c;通过HTML结构合理性与CSS属性的使用来比较不同方案所实现效果的优缺点。 常见设计稿要求 在文本前、后、上、下插入图标、线条、三角形、圆形插…

mysql动态sql是什么,mysql中动态sql的一次实际应用

一、前言本次实际应用中&#xff0c;使用到了如下几个要点&#xff1a;mysql的动态建表;mysql的多表插入;mysql的多表更新;mysql的多表删除;二、使用场景2.1 动态建表要求建立多个表&#xff0c;例如电压、电流等表&#xff0c;这些表的字段是完全一样的&#xff0c;只有表名不…

Spring MVC会话教程

会话管理是每个Web应用程序必不可少的部分。 由于Spring MVC是用于Web开发的功能强大的框架&#xff0c;因此它具有自己的工具和API与会话进行交互。 今天&#xff0c;我打算向您展示Spring MVC应用程序中会话处理的基本方法。 这意味着处理表单&#xff0c;将对象添加到会话中…

如何运行开源的安卓项目?

第一步:进入github开源安卓项目中&#xff0c;点击clone 第二步&#xff1a;打开android studio&#xff0c;选择checkout从Git中迁出项目 将github的地址复制进去 第三步&#xff1a;系统会自动下载&#xff0c;加载一段时间。然后出现下面的就算是结束了。 最后&#xff0c;运…

fis pure开发php,50个精品网站鉴赏

50个精品网站鉴赏介绍给大家的是几千个世界优秀网站中的精中之精的作品&#xff0c;都有非常不错的创意&#xff0c;推荐给众多网站的设计人员&#xff0c;好好借鉴一下别人是怎么设计网站的。这些网站主要的制作工具为FLASH&#xff0c;因为它有较好、较强的动态效果&#xff…