Kata String Calculator

Fantástica kata para comenzar a practicar el testeo unitario y el avanzar paso a paso, escribiendo el mínimo código necesario. El nivel de complejidad del código irá aumentando poco a poco.

Enunciado

Antes de comenzar

  • Intenta no leer el enunciado completo antes de empezar, ve leyendo poco a poco mientras lo resuelves.
  • Haz sólo una tarea a la vez. El truco está en aprender a trabajar de forma incremental.
  • Asegúrate de testear únicamente las entradas correctas. No es necesario testear las entradas incorrectas para esta kata.

Enunciado paso a paso

  1. Crea una String Calculator con el método: int Add(string numbers)
    • El parámetro del método puede contener 0, 1 o 2 números y devolverá su suma (para un string vacío devolverá 0). Por ejempo: "" o "1" o "1,2"
    • Compieza por un test simple para un string vacío y luego para 1 y 2 números.
    • Recuerda resolver el problema de la manera más simple posible para que te fuerce a escribir las pruebas que aún no se te habían ocurrido.
    • Recuerda refactorizar después de conseguir pasar cada test.
  2. Permite al metodo "Add" manejar cualquier cantidad de números.
  3. Permite al método "add" manejar saltos de línea entre números en lugar de usar comas.
    • La siguiente entrada es correcta: "1\n2,3" (el resultado será 6)
    • La siguiente entrada NO es correcta: "1,\n" (no hace falta que la pruebes, es simplemente para clarificar)
  4. Soporta diferentes delimitadores
    • Para cambiar un delimitador, el comienzo del string debe contener una línea separada que sea como esta: "//[delimitador]\n[números...]". Por ejemplo: "//;\n1;2" debe dar como resultado 3 donde el delimitador por defecto es ";".
    • La primera línea es opcional. Todos los escenarios existentes hasta ahora, deben estar soportados.
  5. Llamar al método "Add" con números negativos deberá lanzar una excepción con el texto "negativos no soportados" y el número negativo que ha sido pasado. Si hay múltiples números negativos, muestra todos ellos en el mensaje de la excepción.
  6. Los numeros mayores de 1000 deben ser ignorados. Por ejemplo "2,1001" dará como resultado 2.
  7. Los delimitadores pueden ser de cualquier longitud con el siguiente formato: "//[delimiter]\n". Por ejemplo: "//[***]\n1***2***3" debe dar como resultado 6.
  8. Permite múltiples delimitadores de la siguiente manera: "//[delim1][delim2]\n". Por ejemplo: "//[*][%]\n1*2%3" debe dar como resultado 6.
  9. Asegúrate de que puedes manejar delimitadores de cualquier longitud mayor de un caracter.

Fuente original: http://osherove.com/tdd-kata-1/

Ver todo el enunciado

Preguntas sobre el desafío

¿Tienes dudas sobre el desafío? plantéala aquí

Plantea tu pregunta

14 Soluciones

Dar mi solución

0votos
Kata String Calculator en JavaScript
por

Diego Güemes

hace 4 años

Es mi primera kata en Javascript. He intentado realizarla aplicando SOLID, aunque seguro que Javascript tiene algunas reglas determinadas para el uso de ciertos patrones. Agradecería feedback de cualquier tipo, y sobretodo en el uso de Jasmine, ya que creo que podría hacer un uso más eficiente de los "describe" para agrupar los tests que suman, los que prueban delimitadores personalizados, etc. Link: https://github.com/diegoguemes/katas/tree/master/String%20Calculator/JavaScript

1voto
Kata String Calculator en Ruby
por

msanroman

usando rspec-mocks hace 5 años

¡Primera solución subida a solveet! He utilizado esta kata como ejercicio para practicar SRP, al dejar a otras clases encargarse de lógica que no me cuadraba que debiese saberlo la calculadora. Además, me ha servido como ejercicio para practicar stubs y operaciones de colecciones en Ruby, lenguaje en el que aún soy un principiante :)

Dar mi solución