[ http://jira.codehaus.org/browse/JBEHAVE-247?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Mauro Talevi resolved JBEHAVE-247. ---------------------------------- Resolution: Fixed Added injectable PrioritisingStrategy in StepFinder with default ByPriorityField impl. Added alternative ByLevenshteinDistance impl. > jBehave should be more intelligent/flexible with regards to prioritisation of > steps > ----------------------------------------------------------------------------------- > > Key: JBEHAVE-247 > URL: http://jira.codehaus.org/browse/JBEHAVE-247 > Project: JBehave > Issue Type: New Feature > Components: Core > Reporter: Stephen Cresswell > Priority: Minor > Fix For: 3.0 > > Attachments: LevenshteinDistance.java, > PrioritizableUnmatchedToPendingStepCreator.java > > > BDD's strength relies on being able to write fluent scenarios. jBehave's > support for this is very good, but there is still room for improvement. For > example a typical scenario might read... > {quote} > Scenario: Schedule Patient Discharge > Given a medical patient called Bob Holness who is not medically fit > When I change Bob's state to medically fit > And select a discharge time of tomorrow morning > And select a discharge complexity of 3 > {color:red}Then Bob's discharge schedule should be displayed on the ward > board{color} > {quote} > Now in a related scenario let's say I want to cancel while rescheduling a > discharge... > Scenario: Cancel Rescheduling Patient Discharge > {quote} > Given a medical patient called Bob Holness who already has a discharge > schedule > When I reiterate that Bob's state is medically fit > And select a discharge time of tomorrow morning > And cancel the discharge schedule > {color:red}Then Bob's *old* discharge schedule should be displayed on the > ward board{color} > {quote} > The underlying implementation of assserting Bob's actual discharge schedule > is the same, but I want to emphasise *the expression of intent* through use > of words such as old, new, still, etc. > jBehave partially supports this through aliases > {code:title=MySteps.java|borderStyle=solid} > @Then('''$patient discharge schedule should be displayed on the ward board''') > @Aliases(values=['''$patient old discharge schedule should be displayed on > the ward board''']) > public void assertDischargeScheduleOnWardPage(Patient patient) { > wardBoardPage.assertDischargeSchedule(patient) > } > {code} > The trouble is that the above fails because of the way in which jBehave > matches and prioritises steps. Both "Then" and "Alias" steps will match the > sentence > "Bob's old discharge schedule should be displayed on the ward board", but > "Then" will be prioritised based on it's declaration order, causing the value > "Bob's old" to be passed to the PatientParameterConverter. Since no patient > exists with the name "Bob's old", the parameter converter will return null > and the test fails. > Currently the workaround is to reword the steps slightly to prevent both of > them matching... > {quote}Then {color:red}"{color}Bob's{color:red}"{color} discharge schedule > should be displayed on the ward board > Then {color:red}"{color}Bob's{color:red}"{color} old discharge schedule > should be displayed on the ward board{quote} > or > {quote}Then Bob's discharge schedule should be displayed on the ward board > Then Bob's old discharge schedule should {color:red}now{color} be displayed > on the ward board{quote} > but both are inferior to the original. A nicer (and fairly easy) solution > would be to base this priortisation on similarity with the string step, using > something like the Levenshtein distance. Harder, but better yet would be to > make the prioritsation configurable. > I've attached the first solution (with lots of printlns so you can see how > well the prioriisation works). -- 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