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

mockito_使用FizzBu​​zz和Mockito进行单元测试相关推荐

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

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

  2. 使用FizzBu​​zz和Mockito进行单元测试

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

  3. zz测试接口_使用FizzBu​​zz和JUnitParams进行单元测试

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

  4. 使用FizzBu​​zz和JUnitParams进行单元测试

    我有时使用FizzBu​​zz向新手演示单元测试的基础. 尽管FizzBu​​zz确实是一个简单的问题,但它也可以用于演示更高级的单元测试技术,例如实现参数化测试. FizzBu​​zz的可能解决方案 ...

  5. FizzBu​​zz Kata与Java流

    在柔道练习仅几周之后,我的儿子感到无聊. 他抱怨说自己没有学任何东西,因为他一遍又一遍地做着同样的事情. 混淆学习和做新事物的不仅仅是幼儿. 例如,有多少软件开发人员通过执行kata或参加dojos来 ...

  6. mockito mock void方法_纯干货,浅谈Mockito在单元测试中的实际应用

    本文接上文"接口方没写代码,对接方只能停工吗?",在这里简单介绍Mockito在单元测试中的实际应用.本文使用场景较单一,如有雷同,不甚荣幸,闲言少叙,开门见山.本文将使用mock ...

  7. deepin中zz_如何解决R中的FizzBu​​zz问题

    deepin中zz The FizzBuzz problem is a classic test given in coding interviews. The task is simple: Fiz ...

  8. kata_Java中的功能性FizzBu​​zz Kata

    kata 不久前,我使用Java 8流和lambda解决了FizzBu​​zz kata问题. 尽管最终结果是可行的,但中间步骤却没有. 我当然可以做得更好. 与往常一样,让我们​​从失败的测试开始: ...

  9. Java中的功能性FizzBu​​zz Kata

    不久前,我使用Java 8流和lambda解决了FizzBu​​zz kata问题. 尽管最终结果是可行的,但中间步骤却没有. 我当然可以做得更好. 与往常一样,让我们​​从失败的测试开始: pack ...

最新文章

  1. java 模拟get登录_java 模拟get请求
  2. linux 非阻塞 socket,linux 非阻塞式socket编程求助。。
  3. java基础入门-预定义类与自定义类
  4. java 读取css文件_java文件读取的两种方式
  5. SQL Server 2014安装教程
  6. zookeeper 源码阅读(1)
  7. Postman status: 415_415亩!白云首宗农村土地规模化流转成功签约
  8. 一种全新的软件界面设计方法
  9. C++复习 auto
  10. winform listbox增加鼠标双击事件
  11. 关于ENSP1.2.00.510安装过程中的一点心得
  12. mysql blob 字段,mysql BLOB字段类型用法介绍
  13. 问脉首创旁路云原生安全检测框架!
  14. 2013 ACM-ICPC南京赛区全国邀请赛
  15. [Docker]进入容器命令
  16. 高仿网易评论列表效果之界面分析
  17. 【数据结构与算法】专栏系列文章目录
  18. ViewPager 系列之 打造一个通用的 ViewPager
  19. 【linux】一篇全面的linux软件包管理的总结
  20. 计算机一级考试模拟题2003word,2015计算机一级MsOffice练习:Word2003

热门文章

  1. Linux 设备驱动--- 阻塞型字符设备驱动 --- O_NONBLOCK --- 非阻塞标志【转】
  2. Apache Shiro教程
  3. 20个必会的JavaScript面试题
  4. Android中项目中各个文件夹的含义和用途详解
  5. 通过VNC Viewer使用VMware虚拟机的远程桌面连接
  6. 开源中国吸引我来的原因
  7. Script:Speed Up Large Index Create or Rebuild
  8. 网管网络布线之常用兵器谱
  9. spring中的quartz调度问题
  10. photoshop ps 拉长裙子 方法