Cucumber ist eine externe DSL. Hier ist ein Beispiel:
Code: Alles auswählen
Scenario: Add two numbers
Given I have entered 4 into the calculator
And I have entered 3 into the calculator
When I press add
Then I should see 7 as result
Man muss nun Cucumber sagen, was "I have entered 4 into the calculator" eigentlich bedeutet. In Ruby sieht das so aus:
Code: Alles auswählen
Given /I have entered (\d+) into the calculator/ do |n|
@calculator ||= Calculator.new
@calculator.push(n.to_i)
end
In Python könnte ich so was schreiben:
Code: Alles auswählen
@Given(r"I have entered (\d+) into the calculator")
def do(world, n):
if not hasattr(world, 'calculator'):
world.calculator = Calculator()
world.calculator.push(int(n))
Ein Parser, der die oben erwähnten Schlüsselwörter erkennt, ist jedenfalls nicht weiter schwer. Mit jeder Zeile geht er dann in eine von drei Listen mit den durch die Dekoratoren registrieren Funktionen und führt sie dann im Kontext eines "World"-Objekts aus.
Wie würde man das "should" zusichern?
Code: Alles auswählen
@Then(r"I should see (\d+) as result")
def do(world, n):
assert world.calculator.pop() == int(n)
Stefan