Details
-
Type: Bug
-
Status: Open
-
Priority: Major
-
Resolution: Unresolved
-
Affects Version/s: 3.5.4
-
Fix Version/s: None
-
Component/s: Core
-
Labels:None
-
Environment:Windows 7, Java 6
-
Number of attachments :
Description
When a step with @Named parameters is used in a scenario that uses an Example table for SOME of its steps, but for this specific step is given some explicit value, then IF the parameter name is not fully surrounded with whitespace AND it matches a name from the Examples table, then the given value is ignored. Instead, the value from the Examples table is injected.
If the parameter name is unrelated to anything in the Examples table, then all is fine, even when the parameter is not fully surrounded with whitespace.
(This is slightly related to http://jira.codehaus.org/browse/JBEHAVE-646)
For example, all fine:
@Given("I have <a> and <b>") public void givenAAndB(@Named("a") String myA, @Named("b") String myB) { assertThat(myA).isEqualTo("this"); assertThat(myB).isEqualTo("that"); } @When("I do <a>") public void whenIDoA(@Named("a") String myA) { assertThat(myA).isEqualTo("this"); } @Then("I see <b>") public void thenISeeB(@Named("b") String myB) { assertThat(myB).isEqualTo("that"); } // $x not surrounded by all whitespace, but "x" NOT known in Examples table: all fine @When("I did '$x'") public void whenIDidX(@Named("x") String myX) { assertThat(myX).isEqualTo("foo"); }
...but wrong:
// $b not surrounded by all whitespace, and "b" also known in Examples table @Then("I saw '$b'") public void thenISawB(@Named("b") String myB) { // Will fail: is assigned "that" from Examples table instead assertThat(myB).isEqualTo("bar"); }
...when used with:
Given I have <a> and <b> When I did 'foo' And I do <a> Then I see <b> And I saw 'bar' Examples: | a| b| |this|that|
Based on other unit tests from org.jbehave.core.steps.StepCandidateBehaviour, the following fails in 3.5.4: