Cucumber Expressions

Cucumber Expression is an expression type to specify step definitions. Cucumber Expressions is an alternative to Regular Expressions with a more intuitive syntax.

You can find a detailed description about cucumber expressions on GitHub. In this page we only provide a short summary and the special handling in .NET / Reqnroll.

The following step definition that uses cucumber expression matches to the step When I have 42 cucumbers in my belly

Step Definition File
[When("I have {int} cucumbers in my belly")]
public void WhenIHaveCucumbersInMyBelly(int count) { ... }

Cucumber Expression basics

Simple text

To match for a simple text, just use the text as cucumber expression.

[When("I do something")] matches to When I do something

Parameters

Parameters can be defined using the {parameter-type} syntax. Where parameter-type can be any of the following:

  • A short name for some simple built-in types: {int}, {long}, {byte}, {float}, {double}, {decimal}

  • string ({string}) that matches to quoted text wrapped with either " or '. E.g., [Given("a user {string}")] matches to Given a user "Marvin" or Given a user 'Zaphod Beeblebrox'.

  • word ({word}) that matches to a single word without quotes. E.g., [Given("a user {word}")] matches to Given a user Marvin.

  • Empty ({}) that matches to anything (like (.*) with regex).

  • A type name without namespace that is supported by Reqnroll as a parameter type (types with built-in support, enum types and types with custom argument conversions). E.g. [When("I have {CustomColor} cucumbers in my belly")] matches to When I have green cucumbers in my belly if CustomColor is an enum with Green as a value.

  • A custom type name you have specified int the [StepArgumentTransformation] attribute. E.g., With [StepArgumentTransformation("v(.*)", Name = "my_version")], you can define a step as [When("I download the release {my_version} of the application")] that matches to When I download the release v1.2.3 of the application.

Optionals, alternatives

Cucumber expressions use the parentheses ((...)) for optionals and the / character to define alternatives. The step definition

Step Definition File
[When("I have {int} cucumber(s) in my belly/tummy")]
public void WhenIHaveCucumbersInMyBelly(int count)

will match to all of the following steps

Feature File
When I have 42 cucumbers in my belly
When I have 1 cucumber in my belly
When I have 8 cucumbers in my tummy

Using Cucumber Expressions with Reqnroll

You can use both cucumber expressions and regular expressions in your project. Reqnroll has uses some heuristics to decide if your expression is a cucumber expression or a regular expression.

In case your regular expression is wrongly detected as cucumber expression, you can always force to use regular expression by specifying the regex start/end markers (^/$).

Step Definition File
[When(@"^this expression is treated as a regex$")]