Yes, upon reflection, adding a method to StoryReporter makes more sense than StepMonitor. But in essence, a similar solution, quite different from the @BeforeStep annotation.

I'll update the jira issue and make enhancement.

On 22/02/2012 17:29, Graham Abell wrote:
Sorry, correct - methods where we can add our calls, I'm possibly muddying the water here.

I agree, it seems to me that the reporter is well suited since it handles before/after story and after step so it's just the addition of a beforeStep().

On 22 February 2012 16:23, Brian Repko <[email protected] <mailto:[email protected]>> wrote:

    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" <[email protected]
    <mailto:[email protected]>>
    To: [email protected] <mailto:[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:
    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
    <[email protected] <mailto:[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
        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
        <[email protected]
        <mailto:[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" <[email protected]
            <mailto:[email protected]>>
            To: [email protected]
            <mailto:[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
            <[email protected]
            <mailto:[email protected]>
            >> <mailto:[email protected]
            <mailto:[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
            >>>
            >>>
            
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
            <[email protected] <mailto:[email protected]>
            >>> <mailto:[email protected]
            <mailto:[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:
            >>>
            >>> http://xircles.codehaus.org/manage_email
            >>>
            >>>
            >>>
            >>
            >>
            >
            >


            --
            http://blog.solidsoft.info/ - Working code is not enough


            
---------------------------------------------------------------------
            To unsubscribe from this list, please visit:

            http://xircles.codehaus.org/manage_email




            
---------------------------------------------------------------------
            To unsubscribe from this list, please visit:

            http://xircles.codehaus.org/manage_email



Reply via email to