JBehave

Candidate steps should be aware of the method annotation type when matching textual steps

Details

  • Type: Improvement Improvement
  • Status: Resolved Resolved
  • Priority: Major Major
  • Resolution: Fixed
  • Affects Version/s: 2.3
  • Fix Version/s: 2.3.1, 2.4
  • Component/s: Core
  • Labels:
    None
  • Number of attachments :
    0

Description

Candidate steps should be aware of annotations @Given, @When and @Then and distinguish pattern steps arising from different annotations.
At present, there is no such distinction and can lead to very confusing behaviour.
Example:
@Given("foo named $name")
public void givenFoo(String name) {...}
@When("foo named $name is created")
public void createFoo{...}

If I have a scenario like this:
Scenario: Do stuff
Given xyz
When foo named Bar is created
...
then the "When" can match the givenFoo() method, which gets passed "Bar is created" as parameter.

This unexpected behaviour, due to the implict uniqueness required of the matching pattern across all annotations, causes randomness in test execution. Sometimes it works, sometimes it doesn't. It would be better if the different annotations where treated differently in the matching of patterns, so that when I write Given/When/Then in the scenarios they will match corresponding @Given/@When/@Then methods.

Activity

Hide
Mauro Talevi added a comment -

Reworded to better express current behaviour and new feature requirement.

Show
Mauro Talevi added a comment - Reworded to better express current behaviour and new feature requirement.
Hide
Mauro Talevi added a comment -

Introduced StepType enum and refactored CandidateStep to be aware of type. The starting word must now match the type (in the appropriate locale).

Deprecated the Steps(String[] startingWords) constructors as these cannot resolve the word by type.

Show
Mauro Talevi added a comment - Introduced StepType enum and refactored CandidateStep to be aware of type. The starting word must now match the type (in the appropriate locale). Deprecated the Steps(String[] startingWords) constructors as these cannot resolve the word by type.

People

Vote (0)
Watch (0)

Dates

  • Created:
    Updated:
    Resolved: