Иногда я использую FizzBuzz, чтобы продемонстрировать новичкам основы модульного тестирования. Хотя FizzBuzz — действительно простая задача, ее также можно использовать для демонстрации более продвинутых методов модульного тестирования, таких как реализация параметризованных тестов.
Одним из возможных решений FizzBuzz является:
|
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
|
public class FizzBuzz { private static final int THREE = 3; private static final int FIVE = 5; 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 String.valueOf(number); } private boolean isDivisibleBy(int dividend, int divisor) { return dividend % divisor == 0; }} |
Приведенный выше пример идеально подходит для показа параметризованных тестов с помощью JUnitParams. Мы могли бы создать 4 метода тестирования, каждый для своего случая FizzBuzz:
|
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
@Test@Parameters({"1", "2", "4", "7", "11", "13", "14"})public void returnsNumberForNumberNotDivisibleByThreeAndFive(int number) { assertThat(fizzBuzz.calculate(number)).isEqualTo("" + number);}@Test@Parameters({"3", "6", "9", "12", "18", "21", "24"})public void returnFizzForNumberDivisibleByThree(int number) { assertThat(fizzBuzz.calculate(number)).isEqualTo("Fizz");}@Test@Parameters({"5", "10", "20", "25", "35", "40", "50"})public void returnBuzzForNumberDivisibleByFive(int number) { assertThat(fizzBuzz.calculate(number)).isEqualTo("Buzz");}@Test@Parameters({"15", "30", "45", "60"})public void returnsFizzBuzzForNumberDivisibleByThreeAndFive(int number) { assertThat(fizzBuzz.calculate(number)).isEqualTo("FizzBuzz");} |
Но мы могли бы также охватить все случаи в одном параметризованном методе тестирования:
|
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
|
@Test@Parameterspublic void fizzBuzz(int given, String expected) { assertThat(fizzBuzz.calculate(given)).isEqualTo(expected);}public Object[] parametersForFizzBuzz() { return $( $(1, "1"), $(2, "2"), $(3, "Fizz"), $(4, "4"), $(5, "Buzz"), $(6, "Fizz"), $(7, "7"), $(10, "Buzz"), $(15, "FizzBuzz"), $(30, "FizzBuzz") );} |
Наслаждайтесь JunitParams !
- Взгляните на демонстрационный проект юнит-тестирования, представляющий различные аспекты юнит-тестирования, включая параметризованные тесты: https://github.com/kolorobot/unit-testing-demo
| Ссылка: | Модульное тестирование с FizzBuzz и JUnitParams от нашего партнера JCG Рафаля Боровца в блоге Codeleak.pl . |