Иногда я использую 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 @Parameters public 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 . |