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: 2.6
         Attachments: 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


Reply via email to