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]> 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]>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]> >> To: [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]>> 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]>> 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 >> >> >> > >
