使用FizzBuzz和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 –標記應在其上執行注射的字段
享受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
總結
以上是生活随笔為你收集整理的使用FizzBuzz和Mockito进行单元测试的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 纪事地图和Yahoo Cloud服务基准
- 下一篇: 芒果TV安卓版(芒果tv安卓版)