[ http://jira.codehaus.org/browse/JBEHAVE-244?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Mauro Talevi updated JBEHAVE-244: --------------------------------- Fix Version/s: (was: 3.1) 3.0 > Step parameters should be converted just before the step executes (not when > the scenario is parsed) > --------------------------------------------------------------------------------------------------- > > Key: JBEHAVE-244 > URL: http://jira.codehaus.org/browse/JBEHAVE-244 > Project: JBehave > Issue Type: Improvement > Components: Core > Affects Versions: 2.5 > Reporter: Stephen Cresswell > Fix For: 3.0 > > Attachments: Added_support_for_deferred_parameter_conversion.patch, > BaseSteps.groovy, LazyCandidateStep.groovy > > > I should be able to use a ParamaterConverter to retrieve an entity from the > database, e.g. > Given an employee called Bob > When I give Bob a pay rise of 10,000 pounds > Then Bob forgets about his embarrassing law suit > {code:title=EmployeeSteps.java|borderStyle=solid} > @Given("an employee called $name") > public void createEmployee(String name) { > new EmployeeBuilder().name(name).buildAndSave(); > } > @When("I give $employee a pay rise of $amount pounds") > public void givePayRise(Employee employee, Integer amount) { > employee.increaseSalary(amount); > } > {code} > {code:title=EmployeeConverter.java|borderStyle=solid} > public class EmployeeConverter implements ParamterConverter { > EmployeeRepository repo; > public Object convertValue(String value, Type type) { > return repo.findByFirstName(value) > } > }{code} > The parameter converter would be simple to implement, but currently won't > work without shenanigans because the step arguments are converted when the > step is created, and all the steps in a scenario are created up front, > before any of them are executed. This means that at the time the parameter > converter attempts to retrieve the entity from the database it hasn't been > created. > To get around the problem I've created a LazyCandidateStep class, which only > creates the Step in the perform or doNotPerform methods. This isn't ideals > however because I also have to override Steps.createCandidateStep. I've > attached my workaround as an example. -- This message is automatically generated by JIRA. - If you think it was sent incorrectly contact one of the administrators: http://jira.codehaus.org/secure/Administrators.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