日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

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

發布時間:2023/12/3 编程问答 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 使用FizzBu​​zz和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的數字。 代碼的這一部分可以用來展示在JUnit中使用Mockito進行模擬的想法。

作為此練習的結果,我最終得到了一個NumberPrinter ,它帶有兩個參數: Printer和NumberCalculator并且具有一個公共方法來打印數字:

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

總結

以上是生活随笔為你收集整理的使用FizzBu​​zz和Mockito进行单元测试的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。