Details
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
Field | Original Value | New Value |
---|---|---|
Fix Version/s | 2.4 [ 15664 ] | |
Issue Type | Bug [ 1 ] | Improvement [ 4 ] |
Description |
In general, words should have meanings. For JBehave, if I use the annotations @Given, @When and @Then, they should mean different things. Right now there is no difference, which 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 words not having any meaning, causes randomness in test execution. Sometimes it works, sometimes it doesn't. It would be better if the different annotations had separate meanings, so that when I write Given/When/Then in the scenarios they will match corresponding @Given/@When/@Then methods. |
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. |
Summary | Words should have meanings | Candidate steps should be aware of the method annotation type when matching textual steps |
Assignee | Mauro Talevi [ maurotalevi ] |
Status | Open [ 1 ] | In Progress [ 3 ] |
Fix Version/s | 2.3.1 [ 15921 ] |
Resolution | Fixed [ 1 ] | |
Status | In Progress [ 3 ] | Resolved [ 5 ] |
Reworded to better express current behaviour and new feature requirement.