« Previous - Version 18/40 (diff) - Next » - Current version
Guillermo Gómez, 02/17/2011 06:48 pm


Cucumber

Behaviour Driven Development (BDD).

Instalación

# yum install rubygem-cucumber

BDD ejemplo

$ mkdir cucumber-1
$ cd cucumber-1
$ mkdir features
$ mkdir features/step_definitions

Describa el comportamiento en texto plano

Cucumber es una herramienta que ejecuta descripciones funcionales en texto plano como pruebas automatizadas. El lenguaje que Cucumber entiende se conoce como Gherkin.

 1# language: es
 2Característica: Buscar en cursos
 3        Con la finalidad de asegurar una mejor utilización de los cursos
 4        Los estudiantes potenciales deben ser capaces de realizar búsqueda en los cursos
 5
 6Escenario: Búsqueda por tema
 7        Dado que hay cursos que no tienen el tema "biología" 
 8        Y que hay 2 cursos , A001, B205, que cada uno tiene "biología" como uno de sus temas
 9        Cuando yo busque por "biología" 
10        Entonces yo debería ver los siguientes cursos:
11                | Id. del curso |
12                | A001          |
13                | B205          |

Corrida de prueba

$ cucumber features/f1.feature 
# language: es
Característica: Buscar en cursos
  Con la finalidad de asegurar una mejor utilización de los cursos
  Los estudiantes potenciales deben ser capaces de realizar búsqueda en los cursos

  Escenario: Búsqueda por tema                                                           # features/f1.feature:6
    Dado que hay cursos que no tienen el tema "biología"                                 # features/f1.feature:7
    Y que hay 2 cursos , A001, B205, que cada uno tiene "biología" como uno de sus temas # features/f1.feature:8
    Cuando yo busque por "biología"                                                      # features/f1.feature:9
    Entonces yo debería ver los siguientes cursos:                                       # features/f1.feature:10
      | Id. del curso |
      | A001          |
      | B205          |

1 scenario (1 undefined)
4 steps (4 undefined)
0m0.007s

You can implement step definitions for undefined steps with these snippets:

Dado /^que hay cursos que no tienen el tema "([^"]*)"$/ do |arg1|
  pending # express the regexp above with the code you wish you had
end

Dado /^que hay (\d+) cursos , A(\d+), B(\d+), que cada uno tiene "([^"]*)" como uno de sus temas$/ do |arg1, arg2, arg3, arg4|
  pending # express the regexp above with the code you wish you had
end

Cuando /^yo busque por "([^"]*)"$/ do |arg1|
  pending # express the regexp above with the code you wish you had
end

Entonces /^yo debería ver los siguientes cursos:$/ do |table|
  # table is a Cucumber::Ast::Table
  pending # express the regexp above with the code you wish you had
end

If you want snippets in a different programming language, just make sure a file
with the appropriate file extension exists where cucumber looks for step definitions.

Escriba la definición de paso en Ruby

Cree un subdirectorio step_definitions y un primer archivo de definiciones de paso como features/step_definitions/basic_steps.rb .

 1Dado /^que hay cursos que no tienen el tema "([^"]*)"$/ do |arg1|
 2  pending # express the regexp above with the code you wish you had
 3end
 4
 5Dado /^que hay (\d+) cursos , A(\d+), B(\d+), que cada uno tiene "([^"]*)" como uno de sus temas$/ do |arg1, arg2, arg3, arg4|
 6  pending # express the regexp above with the code you wish you had
 7end
 8
 9Cuando /^yo busque por "([^"]*)"$/ do |arg1|
10  pending # express the regexp above with the code you wish you had
11end
12
13Entonces /^yo debería ver los siguientes cursos:$/ do |table|
14  # table is a Cucumber::Ast::Table
15  pending # express the regexp above with the code you wish you had
16end

Nueva corrida

$ cucumber features/f1.feature  
# language: es
Característica: Buscar en cursos
  Con la finalidad de asegurar una mejor utilización de los cursos
  Los estudiantes potenciales deben ser capaces de realizar búsqueda en los cursos

  Escenario: Búsqueda por tema                                                           # features/f1.feature:6
    Dado que hay cursos que no tienen el tema "biología"                                 # features/step_definitions/f1-sd.rb:2
      TODO (Cucumber::Pending)
      ./features/step_definitions/f1-sd.rb:3:in `/^que hay cursos que no tienen el tema "([^"]*)"$/'
      features/f1.feature:7:in `Dado que hay cursos que no tienen el tema "biología"'
    Y que hay 2 cursos , A001, B205, que cada uno tiene "biología" como uno de sus temas # features/step_definitions/f1-sd.rb:6
    Cuando yo busque por "biología"                                                      # features/step_definitions/f1-sd.rb:10
    Entonces yo debería ver los siguientes cursos:                                       # features/step_definitions/f1-sd.rb:14
      | Id. del curso |
      | A001          |
      | B205          |

1 scenario (1 pending)
4 steps (3 skipped, 1 pending)
0m0.008s

Note el TODO, esto es lo primero que hay que implementar, excelente, Cucumber nos está diciendo qué es lo debemos implementar. Comencemos!