使用FizzBuzz和Mockito进行单元测试
我有時(shí)使用FizzBu??zz向新手演示單元測(cè)試的基礎(chǔ)。 盡管FizzBu??zz確實(shí)是一個(gè)簡(jiǎn)單的問(wèn)題,但是它也可以用于演示更高級(jí)的單元測(cè)試技術(shù),例如模擬 。
FizzBu??zz Kata:
“ 編寫(xiě)一個(gè)程序,打印從1到100的數(shù)字。但是,對(duì)于三個(gè)數(shù)字的倍數(shù),請(qǐng)打印“ Fizz”,而不是數(shù)字;對(duì)于五個(gè)數(shù)字的倍數(shù),請(qǐng)打印“ Buzz”。 對(duì)于三和五的倍數(shù)的數(shù)字,請(qǐng)打印“ 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算法,因此無(wú)法解決FizzBu??zz問(wèn)題。 要完成它,我們需要使用該算法的代碼來(lái)打印從1到100的數(shù)字。 代碼的這一部分可以用來(lái)展示在JUnit中使用Mockito進(jìn)行模擬的想法。
作為此練習(xí)的結(jié)果,我最終得到了一個(gè)NumberPrinter ,它帶有兩個(gè)參數(shù): Printer和NumberCalculator并且具有一個(gè)公共方法來(lái)打印數(shù)字:
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); }引入接口后,我不僅擁有可測(cè)試的代碼,而且擁有更強(qiáng)大的代碼。 為了測(cè)試NumberPrinter我只是使用Mockito的強(qiáng)大功能和簡(jiǎn)單性來(lái)模擬依賴項(xiàng)。 使用Mockito批注,配置測(cè)試代碼的讀取效果更好。
Mockito功能展示:
- 創(chuàng)建和注入模擬
- 存根方法還可以為連續(xù)的方法調(diào)用設(shè)置不同的行為。
- 將void方法存入一個(gè)異常
- 驗(yàn)證
使用的注釋:
- @RunWith(MockitoJUnitRunner.class) –在每個(gè)測(cè)試方法之前初始化@Mock
- @Mock –將字段標(biāo)記為模擬
- @InjectMocks –標(biāo)記應(yīng)在其上執(zhí)行注射的字段
享受Mockito !
- 想更多地了解Mockito注釋? 看看Eugen Paraschiv的“ Mockito – @ Mock,@ Spy,@ Captor和@InjectMocks”: http : //www.baeldung.com/mockito-annotations
- 尋找代碼樣本? 看一下介紹單元測(cè)試不同方面的unit-testing-demo項(xiàng)目,包括模擬: https : //github.com/kolorobot/unit-testing-demo
翻譯自: https://www.javacodegeeks.com/2014/11/unit-testing-exercise-with-fizzbuzz-and-mockito.html
總結(jié)
以上是生活随笔為你收集整理的使用FizzBuzz和Mockito进行单元测试的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 纪事地图和Yahoo Cloud服务基准
- 下一篇: 使用Maven配置JBoss / Wil