这次,我想对测试框架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

JUnit和Mockito合作相关推荐

  1. junit mockito_JUnit和Mockito合作

    junit mockito 这次,我想对测试框架Mockito进行概述. 毫无疑问,这是用于测试Java代码的最受欢迎的工具之一. 我已经对Mockito的竞争对手EasyMock进行了概述. 这篇文 ...

  2. maven mockito_如何:测试Maven项目(JUnit,Mockito,Hamcrest,AssertJ)中的依赖项

    maven mockito 对于当今的大多数Java项目而言,JUnit本身还远远不够. 您还需要一个模拟库,也许还有其他东西. 在此迷你操作指南中,我介绍了可以在新的Java项目中开始的测试依赖项. ...

  3. 如何:在Maven项目(JUnit,Mockito,Hamcrest,AssertJ)中测试依赖项

    对于当今的大多数Java项目,JUnit本身还远远不够. 您还需要一个模拟库,也许还有其他东西. 在此迷你操作指南中,我介绍了可以在新的Java项目中开始的测试依赖项. 一切都始于JUnit Mave ...

  4. JUnit与EasyMock合作

    开发人员始终需要注意所产生的代码. 在实施新功能或修复某些错误之后,应确保它们能够正常工作. 至少可以借助单元测试来实现. 由于此博客致力于Java编程语言,因此今天我将撰写有关JUnit 4.1和E ...

  5. JUnit与Mockito单元测试典型示例

    单元测试的重要性无需赘述,但单元测试也会遇到困难,其中之一就是如何创建依赖.试想我们常见的server端分层架构,数据访问层Dao,业务层,以及Web层,想要单元测试业务层,我们需要依赖Dao层提供数 ...

  6. JUnit和mockito

    我们都希望写出没bug的代码,那么测试就是必不可少的一个环节.在CI持续集成并发布我们的代码的过程中,有很多测试方法,可以提高我们代码的覆盖率,查缺补漏. 单元测试 单元测试用于测试最小的功能单元,这 ...

  7. 使用junit+mockito进行mock测试实例

    刚开始做网站的时候,测试都是这样的(比如测试修改用户信息的表单逻辑):设置断点,启动运行程序,登陆,点击点击点击然后进入到测试的页面,输入测试数据,进入断点--..一个大的程序启动又慢,还要登陆,还要 ...

  8. 单元测试及框架简介 --junit、jmock、mockito、powermock的简单使用

    转 单元测试及框架简介 --junit.jmock.mockito.powermock的简单使用 2013年08月28日 14:33:06 luvinahlc 阅读数:6413 标签: 测试工具 单元 ...

  9. mockito_吸收Mockito的流利度

    mockito 我最近发现自己编写了一些代码来集成两个不同的平台. 这些系统之一是基于Java的系统,而另一个虽然不是用Java编写的,却提供了Java API. 我将这些系统分别称为Foo和Bar. ...

最新文章

  1. flask中的request
  2. oss图片上传api_交互式核保系统:api明细:图片上传oss接口
  3. Yarn资源分配示例
  4. 心电图心电轴怎么计算_心电图导联及心电轴
  5. Ubuntu文件压缩、解压缩、打包
  6. 影响数百万人的21个经典全英文演讲,看完英语水平暴增!赶紧收藏
  7. Logtail从入门到精通(二):开启日志采集之旅
  8. java final属性
  9. 用恋爱常识来解释编程术语
  10. [Linux学习笔记] Linux常用命令 - 文件搜索命令
  11. 3年了,我依旧单身,而微信小程序已经普及了
  12. 亚马逊被爆内部员工卖数据改差评,中国区尤为严重!
  13. ENVI:There are no available ROls or EVFs associated with this input file.
  14. uni-app 网络请求
  15. Oracle项目管理系统之HSE
  16. Linux查看日志命令
  17. RFB-Net论文代码映射
  18. 【数学】-1的根号二次方等于多少?
  19. 无锡人称包子为馒头,跟宋朝有关?
  20. New Empirical Traceability Analysis of CryptoNote-Style Blockchains

热门文章

  1. java jpa saveall方法优化_JPA批量插入(saveAll)
  2. mfc定义了变量仍提示未定义标识符_JavaScript-变量
  3. ue4 运行禁用鼠标_[UE4] VS code使用LuaPanda断点调试
  4. 转-Kafka【第一篇】Kafka集群搭建
  5. 客户端服务端防止用户重复提交表单
  6. java微服务,微在哪_Java:ChronicleMap第3部分,快速微服务
  7. 构建器设计模式_创新设计模式:构建器模式
  8. mysql 日期索引的使用_日期使用
  9. spring health_为什么Spring的Health会再次向下,向下,向上,向上,向上和向下?...
  10. hibernate删除记录_Hibernate记录:常见问题的提示和解决方案