[ https://jira.codehaus.org/browse/JBEHAVE-720?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Work on JBEHAVE-720 started by Mauro Talevi. > Allow parametrisation of scenarios by delimited names > ----------------------------------------------------- > > Key: JBEHAVE-720 > URL: https://jira.codehaus.org/browse/JBEHAVE-720 > Project: JBehave > Issue Type: Improvement > Components: Core > Affects Versions: 3.5.4 > Reporter: Rui Figueira > Assignee: Mauro Talevi > Fix For: 3.6 > > Attachments: StepCreator.java > > > I'm working on a simplification of the current parameterized scenario > solution. With this I want to: > * avoid the need of defining two different patterns for steps, one for > normal scenarios, and another for parameterized scenarios. > * be able to use column names in Examples tables that differ from the > parameter names that were specified in the step annotation > * avoid having to annotate fields with @Named in parameterized step methods > Take the following steps and scenario, for example: > > {code:title=ParameterizedStory.java} > public class ParameterizedStory extends JUnitStory { > public static class ParamsSteps { > > private String user; > private Set<String> products; // null means no cart... > @BeforeScenario > public void init() { > user = null; > products = null; > } > > @Given("$user is logged in") > public void loggedIn(String user) { > this.user = user; > } > > @Given("$customer has a cart") > public void aCustomerHasACart(String customer) { > assertThat(user, notNullValue()); > assertThat(customer, equalTo(user)); > if (products == null) products = new TreeSet<String>(); > } > > @When("a $product is added to the cart") > public void aProductIsAddedToCart(String product) { > assertThat(products, notNullValue()); > products.add(product); > } > > @Then("cart contains $product") > public void cartContains(String product) { > assertThat(products, notNullValue()); > assertTrue(products.contains(product)); > } > } > public ParameterizedStory() { > // Making sure this doesn't output to the build while it's running > useConfiguration(new MostUsefulConfiguration() > .useStoryReporterBuilder(new StoryReporterBuilder() > .withFormats(Format.CONSOLE) > .withFailureTrace(true) > .withFailureTraceCompression(false)) > .usePendingStepStrategy(new FailingUponPendingStep()) > .useFailureStrategy(new RethrowingFailure())); > } > > @Override > public List<CandidateSteps> candidateSteps() { > return new InstanceStepsFactory(configuration(), new > ParamsSteps()).createCandidateSteps(); > } > } > {code} > {code:title=parameterized_story.story} > Scenario: Use flexible parameters with examples table > Given <client> is logged in > And <client> has a cart > When a <item> is added to the cart > Then cart contains <item> > Examples: > |client|item| > |Rui|chocolate| > |Figueira|car| > {code} > The "Given $user is logged in" step pattern will match "Given <client> is > logged in", and user parameter will be set to client column values. > The main idea is that <client>, instead of represent a named parameter, > represents a placeholder, and that placeholder should be replaced with > whether value exists for it in the examples table. Then, after replacing the > placeholder with the corresponding value, it will then match with the given > step pattern, and $user will be set to the correct value. > I have a working version available at > https://github.com/ruifigueira/jbehave-core/commit/a4107a3ac899c4b952746781f785cba9a97c659c, > that can be used to test the scenario above. -- This message is automatically generated by JIRA. If you think it was sent incorrectly, please contact your JIRA administrators: https://jira.codehaus.org/secure/ContactAdministrators!default.jspa For more information on JIRA, see: http://www.atlassian.com/software/jira --------------------------------------------------------------------- To unsubscribe from this list, please visit: http://xircles.codehaus.org/manage_email