I got the impression that the request was NOT for a @BeforeStep /
@AfterStep annotation but rather methods in either the
StoryReporter or the StepMonitor for those events.  StepMonitor
doesn't seem to be right place - StoryReporter is almost there -
just needs a method for before - which is what the enhancement
request is for.  Or did I read that wrong?

Brian


----- Original message -----
From: "Graham Abell" <[1][email protected]>
To: [2][email protected]
Date: Wed, 22 Feb 2012 16:05:51 +0000
Subject: Re: [jbehave-user] Re: run code before and after each
step
Hi Mauro,

I'm surprised you think it would add a big strain during
execution, in the context of having before/after story and
already having an afterStep then it's just one more point to hook
into [should you wish/need to] I imagine in most scenarios it
won't be used. Of course I'd defer to your knowledge of the
system in making that decision.

I did have a quick look and noticed that cucumber has implemented
a before_step, not that I'm saying you should be basing your
decisions on that basis:
[3]https://github.com/cucumber/cucumber/wiki/Custom-Formatters

If we implemented our own StepMonitor, would we not need to
implement a lot of logic around it or could we just insert the
call we need at the performing method?

thanks,
graham
On 22 February 2012 15:40, Mauro Talevi
<[4][email protected]> wrote:

Hi Graham,
I'm not convinced that having a @BeforeStep is a viable solution
- nor very practical.   In the spirit of the @Before/After
annotations, the annotated methods are all executed before and
after each scenario, story or set of stories (with the notable
exception of the scenario annotations that allow for the
uponOutcome filter).    Having a @Before/AfterStep annotation
would IMO put a big strain on the execution context without much
gain, as you'd then need to do some sort of filtering anyway in
the method implementation to avoid unwanted executions.
If you find the StoryReporter (which reports step outcome events
that are visible to the story writer, not to the step
implementer) is not sufficient for your needs, then I'd say your
need is more technical than business focused and it would be
perhaps better addressed via the StepMonitor.   There is already
a "before" method, called performing(String stepAsString, boolean
dryRun), which is invoked just before the invocation of each
parametrised step.  We could add a performed(String stepAsString)
and you could have your own implementation, possibly implementing
StoryReporter interface as well to give you visibility of the
outcomes.
Would this approach work for you?
Cheers
On 22/02/2012 13:20, Graham Abell wrote:

Hi Brian,



  I've raised an improvement request at
  [5]http://jira.codehaus.org/browse/JBEHAVE-721



I'll have a look at the StepMonitor and see if I have any joy
there,



thanks!

On 22 February 2012 13:05, Brian Repko
<[6][email protected]> wrote:

  Graham/Marcin,
  Typically clearing out steps data is done per scenario. If
  not, then its part of the test and I would clear it out as
  part of a when or a given so that its known that something was
  "cleared".
  You could look at the StepMonitor but that is really part of
  step processing - not lifecycle - its very detailed.
  That said, for the original problem, you might look at AOP for
  your steps.
  And we could/should look at doing beforeStep() in the story
  reporter.
  You could log an enhancement request for that.

Brian
----- Original message -----

From: "Marcin Zajączkowski" <[7][email protected]>
To: [8][email protected]
Date: Wed, 22 Feb 2012 00:00:02 +0100
Subject: Re: [jbehave-user] Re: run code before and after each
step
On 2012-02-21 16:29, Mauro Talevi wrote:
> ATM only step outcomes are reported.  What's your usecase for
monitoring
> the before step phase?
I will join in the discussion because I had similar problem
recently. In
my case parametrised scenarios are running in a Spring context.
Because
given, when, then are called by JBehave separately I had to
introduce
fields in a test class to remember values. Those fields have to
be reset
before each example data set (as well as mocks - some beans in a
Spring
context are mocked). I can do it in "when" method, but it would
be more
readable to annotate JUnit setup method also with @BeforeStep
annotation
to be run before every step.
Regards
Marcin
> On 21/02/2012 14:43, Graham Abell wrote:
>> Thanks, I updated to beta3 and have access to that method now.
>>
>> I've implemented my StoryReporter and see where each method
gets
>> called as part of the reporting. I don't see where I can hook
in
>> before a step is run though, the steps themselves call the
successful,
>> pending, failed etc methods based on their outcome I guess
which would
>> allow me to create the afterStep() call but not the
beforeStep()?
>>
>> thanks again,
>> Graham
>>
>> On 21 February 2012 11:45, Mauro Talevi
<[9][email protected]
>> <mailto:[10][email protected]>> wrote:
>>
>>     Hi Graham,
>>
>>     withReporters() is a new method added in 3.6 (you can use
one of
>>     the betas).  In 3.5.x you only have withFormats() so you'd
need to
>>     define your own format, e.g.
>>
>>      public static final Format TXT = new Format("TXT") {
>>             @Override
>>             public StoryReporter
>>     createStoryReporter(FilePrintStreamFactory factory,
>>                     StoryReporterBuilder storyReporterBuilder)
{
>>
>>
factory.useConfiguration(storyReporterBuilder.fileConfiguration("
txt"));
>>                 return new
TxtOutput(factory.createPrintStream(),
>>     storyReporterBuilder.keywords()).doReportFailureTrace(
>>
>>
storyReporterBuilder.reportFailureTrace()).doCompressFailureTrace
(
>>
storyReporterBuilder.compressFailureTrace());
>>             }
>>         };
>>
>>
>>     On 21/02/2012 11:41, Graham Abell wrote:
>>>     Hi Alex,
>>>
>>>     Yeah, I have the withDefaultFormats() but I can't see a
>>>     withReporters() method, I can't see it in the api either
>>>
>>>
[11]http://jbehave.org/reference/stable/javadoc/core/org/jbehave/
core/reporters/StoryReporterBuilder.html
>>>
>>>
>>>
>>>     am I missing something?
>>>
>>>     cheers,
>>>     graham
>>>
>>>
>>>     On 21 February 2012 11:00, Alex Lehmann
<[12][email protected]
>>>     <mailto:[13][email protected]>> wrote:
>>>
>>>         your runner class has probably a statement using new
>>>         StoryReporterBuilder() and calling .withFormats
and/or
>>>         .withDefaultFormats() , you can add
.withReporters(yourReporter)
>>>
>>>
>>>         On 21.02.2012 11:45, Graham Abell wrote:
>>>
>>>             Having implemented my own StoryReporter, how do I
specify
>>>             that it gets used?
>>>
>>>
>>>
>>>
>>>
>>>
>>>
-----------------------------------------------------------------
----
>>>         To unsubscribe from this list, please visit:
>>>
>>>         [14]http://xircles.codehaus.org/manage_email
>>>
>>>
>>>
>>
>>
>
>
--
[15]http://blog.solidsoft.info/ - Working code is not enough
-----------------------------------------------------------------
----
To unsubscribe from this list, please visit:
   [16]http://xircles.codehaus.org/manage_email
-----------------------------------------------------------------
----
To unsubscribe from this list, please visit:
   [17]http://xircles.codehaus.org/manage_email

References

1. mailto:[email protected]
2. mailto:[email protected]
3. https://github.com/cucumber/cucumber/wiki/Custom-Formatters
4. mailto:[email protected]
5. http://jira.codehaus.org/browse/JBEHAVE-721
6. mailto:[email protected]
7. mailto:[email protected]
8. mailto:[email protected]
9. mailto:[email protected]
  10. mailto:[email protected]
  11. 
http://jbehave.org/reference/stable/javadoc/core/org/jbehave/core/reporters/StoryReporterBuilder.html
  12. mailto:[email protected]
  13. mailto:[email protected]
  14. http://xircles.codehaus.org/manage_email
  15. http://blog.solidsoft.info/
  16. http://xircles.codehaus.org/manage_email
  17. http://xircles.codehaus.org/manage_email

Reply via email to