[
http://jira.codehaus.org/browse/JBEHAVE-247?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=214279#action_214279
]
Paul Hammant commented on JBEHAVE-247:
--------------------------------------
Interesting. I've not looked at the patch. There is a prioritization scheme
already (plain numeric attached to the annotation), but that's not why I'm
commenting.
Thinking about the language of what you're doing, and concentrating on the
Given lines only :-
Given a medical patient called Bob Holness who is not medically fit
vs
Given a medical patient called Bob Holness who already has a discharge
schedule
What it "who" were a synonym for And here?
Such that, in terms of fitting the current JBehave, the Givens could be
re-written as
Given a medical patient called Bob Holness
And is not medically fit
vs
Given a medical patient called Bob Holness
And already has a discharge schedule
Obviously that's more Inglish than English, but it could point to an
enhancement where subtle 'And' breaks could be recognized at subjective or
objective case pronouns*. Subject to configuration of course.
* http://owl.english.purdue.edu/owl/resource/595/02/
Of course, your issue is with the matching of the Then line, not the Given.
Towards that, have you thought about :-
@Then("Then $Bob's $OldOrNot discharge schedule should be displayed on the
ward board")
Arghh... those two vars are too close together, and I'm not sure we can get an
apostrophe-s situation to be left out of the matching group. Ok, ignore me.
- Paul
> 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: Improvement
> Reporter: Stephen Cresswell
> Priority: Minor
> 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