Instrucciones para la Kata “String Calculator”

 ( traducida de http://www.osherove.com/tdd-kata-1/)

Antes de comenzar:

- Trate de no leer todo esta explicación de una vez, sino tarea por tarea.

- Haga una tarea por vez. El truco es aprender a trabajar incrementalmente

- Asegúrese de testear solamente los “inputs” correctos. No es necesario testear “inputs” inválidos para esta kata

Desarrollo del “String Calculator”:

1) Cree un sencillo “String calculator” con un método: int Add(string numbers)

1. El método puede tomar 0, 1 o 2 números, y debe retornan su suma. (para un string vacío debe retornar 0). Por ejemplo: “” o “1” o “1,2”

2. Comience con el caso de test más simple de un string vacío y luego 1 o 2 numeros.

3. Recuerde resolver las cosas de la forma más simple posible de tal manera que lo fuerce a escribir tests que no había pensado o no había tenido en cuenta

4. Recuerde refactorizar despues de pasar cada test.

2) Permita que el metodo Add maneje un numero desconocido de números

3) Permita que el metodo Add pueda manejar saltos de líneas entre números (en lugar de comas)

  1. El siguiente input es correcto “1\n2,3”  (debe dar 6)

  2. El siguiente input NO es correcto: “1,\n” (no es necesario probarlo, es solo una  aclaración)

4) Debe soportar diferentes separadores

  1. Para cambiar un separador, el principio del string deberá contener un salto de línea que debe ser así: “//[delimiter]\n[numbers…]” por ejemplo “//;\n1;2” debe retornar 3 siendo el separador por defecto “;”

  2. La primer linea es opcional. Todos los escenarios deben ser soportados.

5) Llamar al método Add con un número negativo debe lanzar una excepción “Números negativos no son permitidos”, junto con los negativos  que fueron suministrados. Si existen múltiples negativos se deben mostrar todos en el mensaje de la excepción.

----------------------------------------------------------------------------------------------------------------------------------

Si usted es principiante detengase aquí. Continué solamente si pudo finalizar los pasos anteriores en menos de 30 minutos

----------------------------------------------------------------------------------------------------------------------------------

6) Los números mayores que 1000 deben ser ignorados, por lo tanto 2 + 1001 = 2

7) Los separadores pueden ser de cualquier ancho siguiendo el siguiente formato:

 “//[delimiter]\n” por ejemplo: “//[***]\n1***2***3” debe retornar 6.

8) Se deben permitir múltiples separadores como “//[delim1][delim2]\n” Por ej.: “//[*][%]\n1*2%3” debe retornar  6.

9) Asegúrese de poder procesar múltiples separadores con un ancho mayor que un carácter.