mockito 单元测试_使用FizzBu​​zz和Mockito进行单元测试

mockito 单元测试

我有时使用FizzBu​​zz向新手演示单元测试的基础。 尽管FizzBu​​zz确实是一个简单的问题,但它也可以用于演示更高级的单元测试技术,例如模拟

FizzBu​​zz Kata:

编写一个程序,打印一个从1到100的数字。但是,对于三个打印倍数的“ Fizz”(而不是数字),对于五个打印倍数的“ Buzz”。 对于三和五的倍数的数字,请打印“ FizzBu​​zz ”。

FizzBu​​zz算法的可能解决方案:

public class FizzBuzz {private static final int FIVE = 5;private static final int THREE = 3;public String calculate(int number) {if (isDivisibleBy(number, THREE) && isDivisibleBy(number, FIVE)) {return "FizzBuzz";}if (isDivisibleBy(number, THREE)) {return "Fizz";}if (isDivisibleBy(number, FIVE)) {return "Buzz";}return "" + number;}private boolean isDivisibleBy(int dividend, int divisor) {return dividend % divisor == 0;}
}

由于上述代码解决了FizzBu​​zz算法,因此无法解决FizzBu​​zz问题。 要完成它,我们需要使用该算法的代码来打印从1到100的数字。 代码的这一部分可以用来展示使用Mockito在JUnit中进行模拟的想法。

作为此练习的结果,我最终得到了一个NumberPrinter ,它带有两个参数: PrinterNumberCalculator并且具有一个公共方法来打印数字:

public class NumberPrinter {private NumberCalculator numberCalculator;private Printer printer;public NumberPrinter(NumberCalculator numberCalculator, Printer printer) {this.numberCalculator = numberCalculator;this.printer = printer;}public void printNumbers(int limit) {if (limit < 1) {throw new RuntimeException("limit must be >= 1");}for (int i = 1; i <= limit; i++) {try {printer.print(numberCalculator.calculate(i));} catch (Exception e) {// noop}}}
}public interface NumberCalculator {String calculate(int number);
}public interface Printer {void print(String s);
}

引入接口后,我不仅拥有可测试的代码,而且拥有更强大的代码。 为了测试NumberPrinter我只是使用Mockito的强大功能和简单性来模拟依赖项。 使用Mockito批注,配置测试代码的读取效果更好。

Mockito功能展示:

  • 创建和注入模拟
  • 存根方法还可以为连续的方法调用设置不同的行为。
  • 将void方法存入一个异常
  • 验证

使用的注释:

  • @RunWith(MockitoJUnitRunner.class) –在每个测试方法之前初始化@Mock
  • @Mock –将字段标记为模拟
  • @InjectMocks –标记应在其上执行注射的字段
@RunWith(MockitoJUnitRunner.class)
public class NumberPrinterTest {@Mockprivate Printer printer;@Mockprivate NumberCalculator numberCalculator;@InjectMocksprivate NumberPrinter numberPrinter;@Testpublic void printsCalculatorResultsHundredTimes() {// arrangeint limit = 100;when(numberCalculator.calculate(anyInt())).thenReturn("0")  // first invocation returns "0".thenReturn("1"); // other invocations return "1"// actnumberPrinter.printNumbers(limit);// assertverify(numberCalculator, times(limit)).calculate(anyInt());verify(printer, times(1)).print("0");verify(printer, times(limit - 1)).print("1");verifyNoMoreInteractions(numberCalculator, printer);}@Testpublic void continuesOnCalculatorOrPrinterError() {// arrangewhen(numberCalculator.calculate(anyInt())).thenReturn("1").thenThrow(new RuntimeException()).thenReturn("3");// stub the void method with an exceptiondoThrow(new RuntimeException()).when(printer).print("3");// actnumberPrinter.printNumbers(3);// assertverify(numberCalculator, times(3)).calculate(anyInt());verify(printer).print("1");verify(printer).print("3");verifyNoMoreInteractions(numberCalculator, printer);}
}

享受Mockito !

  • 想更多地了解Mockito注释? 看看Eugen Paraschiv的“ Mockito – @ Mock,@ Spy,@ Captor和@InjectMocks”: http : //www.baeldung.com/mockito-annotations
  • 寻找代码样本? 看一下介绍单元测试不同方面的unit-testing-demo项目,包括模拟: https : //github.com/kolorobot/unit-testing-demo

翻译自: https://www.javacodegeeks.com/2014/11/unit-testing-exercise-with-fizzbuzz-and-mockito.html

mockito 单元测试

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

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

相关文章

css 竖行进度图_前端学习--汇集了大量 CSS 的使用和学习的示例代码

CSS-Inspiration这里可以让你寻找到使用或者是学习 CSS 的灵感&#xff0c;以分类的形式&#xff0c;展示不同 CSS 属性或者不同的课题使用 CSS 来解决的各种方法。目前已有上百种的CSS 实现示例&#xff0c;代码可以拿 来即用LayoutCSS实现瀑布流布局(display: flex)CSS实现瀑…

socket io 不使用redis_Redis这么快,线程模型竟然是单线程

Redis的线程模型记住一句话&#xff1a;单进程单线程&#xff0c;IO多路复用。单线程还这么快&#xff1f;是的&#xff0c;你没有看错&#xff0c;Redis是单线程处理的。这是因为Redis的设计者认为Redis是基于内存的操作&#xff0c;瓶颈在内存或者网络带宽而不是CPU。这样&am…

java 统一处理时区_Java时区处理初学者指南

java 统一处理时区基本时间观念 大多数Web应用程序必须支持不同的时区&#xff0c;而正确处理时区绝非易事。 更糟糕的是&#xff0c;您必须确保各种编程语言&#xff08;例如&#xff0c;前端JavaScript&#xff0c;中间件中的Java和作为数据存储库的MongoDB&#xff09;之间的…

服务器系统装内存条,hp服务器怎么安装内存条 hp服务器内存推荐【图文】

服务器虚拟化增加了在每台惠普服务器上运行工作负载的数量&#xff0c;但是越来越多的计算需求则要求IT人员配备更好的HP服务器配件。因此需要对于HP服务器内存市场行情有一定的了解&#xff0c;而选择合适的HP服务器内存却是一件非常难的事情&#xff0c;今天就跟小编一起来看…

7个C语言小程序让你快速入门程序世界

1、题目&#xff1a;有1、2、3、4个数字&#xff0c;能组成多少个互不相同且无重复数字的三位数&#xff1f;都是多少&#xff1f;程序分析&#xff1a;可填在百位、十位、个位的数字都是1、2、3、4。组成所有的排列后再去掉不满足条件的排列。程序源代码&#xff1a;#include#…

去重 属性_面试中常问的List去重问题,你都答对了吗?

面试中经常被问到的list如何去重&#xff0c;用来考察你对list数据结构&#xff0c;以及相关方法的掌握&#xff0c;体现你的java基础学的是否牢固。我们大家都知道&#xff0c;set集合的特点就是没有重复的元素。如果集合中的数据类型是基本数据类型&#xff0c;可以直接将lis…

python paramiko模块下载_Python自动化运维实战:使用Python管理网络设备

现在&#xff0c;我们已经知道如何在不同的操作系统中使用和安装Python以及如何使用EVE-NG搭建网络拓扑。在本章中&#xff0c;我们将学习如何使用目前常用的网络自动化库自动完成各种网络任务。Python可以在不同的网络层上与网络设备进行交互。首先&#xff0c;Python可以通过…

cxf添加拦截器_在CXF API和拦截器中添加Gzip压缩

cxf添加拦截器如今&#xff0c;由于我们在响应中发送大量数据&#xff0c;因此必须对API响应执行Gziping。 它节省了网络带宽和交付时间&#xff0c;当然还节省了Internet上的空间。 CXF提供了以多种方式使用Gzip压缩的选项。 蓝图 注解 蓝图&#xff1a; <bean id"…

3月14日dnf服务器维护,DNF体验服3月14日更新介绍 肝深渊送爆肝王称号!

DNF体验服在3月14日更新全新活动&#xff0c;本次活动奖励总体来看还是非常不错的。例如账绑称号、异界气息清除书、锻造炉等超值奖励&#xff0c;下面让我们来看具体的更新内容吧。PS&#xff1a;本次体验服更新内容将会在3月22日更新至正式服中去。艾肯副本相关1、艾肯副本模…

C语言程序判断计算机的CPU大小端

如何判断一台计算机的CPU是大端还是小字端对齐呢&#xff1f;那么首先得了解何为大端&#xff0c;何为小端&#xff0c;明确一下概念。所谓大端模式&#xff0c;是指字数据的高字节存储在低地址中&#xff0c;而字数据的低字节则存放在高地址中。小端格式&#xff1a;与大端存储…

三角形周长最短问题_一道三角形周长最小值问题

昨天早上&#xff0c;在朋友圈里看到有朋友发了一道求三角形周长最小值的问题&#xff0c;扫了一眼&#xff0c;觉得这条题目形容臃肿&#xff0c;颜值不高&#xff0c;估计没啥意思&#xff0c;便未作深究。晚上&#xff0c;又看到有人在朋友圈中发这条题目。同一条题目反复出…

java 性能调优_Java性能调优调查结果(第二部分)

java 性能调优这是系列文章的第二篇&#xff0c;我们将分析2014年10月进行的性能调整调查的结果。如果您尚未阅读第一部分&#xff0c;我们建议从此处开始 。 第二部分将重点监视Java应用程序的性能问题。 特别是&#xff0c;我们尝试回答以下问题&#xff1a; 人们如何发现性…

西门子伺服电机选型手册_记,新入行维修电工大胆拆解伺服电机和编码器的经历...

作为一名底层维修电工&#xff0c;最怕碰到维修外置编码器的伺服电机&#xff0c;我们单位用的是西门子S120的驱动方案&#xff0c;绝大多数使用的都是西门子配套电机&#xff0c;组态简单&#xff0c;也不用我们维修&#xff0c;有问题送到西门子授权维修点维修。只有个别的使…

变频器服务器电路板维修,变频器线路板常见维修方法

(1)驱动电路损坏的原因及检查造成驱动损坏的原因有各种各样的&#xff0c;一般来说出现的问题也无非是U&#xff0c;V&#xff0c;W三相无输出&#xff0c;或者输出不平衡&#xff0c;再或者输出平衡但是在低频的时候抖动&#xff0c;还有启动报警等等。当一台变频器大电容后的…

C语言 | 输出月份的英文

“要成为绝世高手&#xff0c;并非一朝一夕&#xff0c;除非是天生武学奇才&#xff0c;但是这种人…万中无一”——包租婆这道理放在C语言学习上也一并受用。在编程方面有着天赋异禀的人毕竟是少数&#xff0c;我们大多数人想要从C语言小白进阶到高手&#xff0c;需要经历的是…

rac san+oracle_Oracle11g1+RAC+install+for+CentOS5(ASM+to+FC+SAN)_IT168文库

Wp1998gmail.comV2011.3.3.1一&#xff0e;安裝環境1.1網絡示意1.2所需軟件linux.x64_11gR1_clusterware.ziplinux.x64_11gR1_database_1013.ziporacleasmlib-2.0.4-1.el5.x86_64.rpmoracleasm-support-2.1.4-1.el5.x86_64.rpmoracleasm-2.6.18-194.el5-2.0.5-1.el5.x86_64.rpm…

中兴5250交换机配置手册_TSN工业交换机中文说明

全面了解CC-Link协议家族宣布CLPA会员公司赫斯曼推出最新研发支持TSN的工业交换机RSPE35&#xff0c;同时这款TSN交换机与三菱CC-Link IE TSN产品连接配置手册也已发布&#xff0c;并在文中附了下载。文章传送门↓可是&#xff0c;交换机的资料都是日文和英语的&#xff0c;能否…

华为桌面云 服务器可以虚拟多少,【华为桌面云】案例:单服务器环境且只有两块本地SATA盘创建虚拟机非常慢...

【关键词】&#xff1a;单服务器&#xff0c;SATA盘&#xff0c;创建虚拟机慢&#xff0c;创建VM慢【适用版本】&#xff1a;FusionAccess V100R005 /FusionSphere V100R003【问题描述】&#xff1a;某局点工程师反馈&#xff0c;他使用单台RH2288V2服务器搭建测试环境&#xf…

C语言 | 为什么写这三行代码

C语言实现Hello xiaolin#include//头文件 int main()//主函数 程序的入口 { printf("Hello xiaolin!\n");// \n是换行的意思 return 0;}编译运行结果&#xff1a;Hello xiaolin!--------------------------------Process exited after 3.326 seconds with return v…

如何分析堆外内存使用情况_堆上与堆外的内存使用情况

如何分析堆外内存使用情况总览 最近有人问我在Java中使用堆内存的好处和智慧。 面临相同选择的其他人可能会对这些答案感兴趣。 堆外内存没什么特别的。 线程堆栈&#xff0c;应用程序代码&#xff0c;NIO缓冲区都在堆外。 实际上&#xff0c;在C和C 中&#xff0c;您只有非托…