Programación con TDD: Ejercicios FizzBuzz y Números Romanos
Clase 15 de 24 • Curso Básico de Testing en Java
FizzBuzz
Para practicar TDD, realizaremos este ejercicio clásico.
Usando TDD (empieza por los tests), implementa una función que dado un número: Si el número es divisible por 3, retorna “Fizz” Si el número es divisible por 5, retorna “Buzz” Si el número es divisible por 3 y por 5, retorna “FizzBuzz” En otro caso, retorna el mismo número
public class FizzBuzz { public static String fizzBuzz(int n) { ... } }
Por ejemplo, ve escribiendo estos tests. Tras cada test, escribe el código mínimo necesario para que los tests pasen, y sigue con el siguiente test.
fizzBuzz(3) ⇒ "Fizz" fizzBuzz(6) ⇒ "Fizz" fizzBuzz(5) ⇒ "Buzz" fizzBuzz(10) ⇒ "Buzz" fizzBuzz(15) ⇒ "FizzBuzz" fizzBuzz(30) ⇒ "FizzBuzz" fizzBuzz(2) ⇒ "2" fizzBuzz(16) ⇒ "16"
Reto extra: Números Romanos
Como extra, prueba este otro ejercicio. Anímate a intentarlo. ¡Te va a hacer pensar!
Usando TDD, implementa una función que convierta un número en el equivalente romano.
public class RomanNumerals { public static String arabicToRoman(int n) { ... } }
Por ejemplo, ve escribiendo estos tests. Tras cada test, escribe el código mínimo necesario para que los tests pasen, y sigue con el siguiente test.
arabicToRoman(1) ⇒ "I" arabicToRoman(2) ⇒ "II" arabicToRoman(3) ⇒ "III" arabicToRoman(5) ⇒ "V" arabicToRoman(6) ⇒ "VI" arabicToRoman(7) ⇒ "VII" arabicToRoman(10) ⇒ "X" arabicToRoman(11) ⇒ "XI" arabicToRoman(15) ⇒ "XV" arabicToRoman(16) ⇒ "XVI" arabicToRoman(50) ⇒ "L" arabicToRoman(51) ⇒ "LI" arabicToRoman(55) ⇒ "LV" arabicToRoman(56) ⇒ "LVI" arabicToRoman(60) ⇒ "LX" arabicToRoman(70) ⇒ "LXX" arabicToRoman(80) ⇒ "LXXX" arabicToRoman(81) ⇒ "LXXXI" arabicToRoman(85) ⇒ "LXXXV" arabicToRoman(86) ⇒ "LXXXVI" arabicToRoman(126) ⇒ "CXXVI" arabicToRoman(2507) ⇒ "MMDVII"
Puedes añadir más tests.
En los siguientes tests, probamos los casos en los que hay símbolos que restan, porque van a la izquierda de un símbolo mayor:
arabicToRoman(4) ⇒ "IV" arabicToRoman(9) ⇒ "IX" arabicToRoman(14) ⇒ "XIV" arabicToRoman(19) ⇒ "XIX" arabicToRoman(24) ⇒ "XXIV" arabicToRoman(40) ⇒ "XL" arabicToRoman(49) ⇒ "XLIX" arabicToRoman(90) ⇒ "XC" arabicToRoman(99) ⇒ "XCIX" arabicToRoman(400) ⇒ "CD" arabicToRoman(900) ⇒ "CM"
Puedes añadir más tests.
Ten en cuenta que el símbolo I puede restar a V y X. El símbolo X puede restar a L y C. El símbolo C puede restar a D y M.
Dicho de manera más simple, las combinaciones en las que hay una resta son las siguientes: IV IX XL XC CD CM.