[
http://jira.codehaus.org/browse/JBEHAVE-247?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Mauro Talevi updated JBEHAVE-247:
---------------------------------
Fix Version/s: 3.0
Issue Type: New Feature (was: Improvement)
> jBehave should be more intelligent/flexible with regards to priortisation of
> steps
> ----------------------------------------------------------------------------------
>
> Key: JBEHAVE-247
> URL: http://jira.codehaus.org/browse/JBEHAVE-247
> Project: JBehave
> Issue Type: New Feature
> 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