package org.jbehave.scenario.finegrained.junit.monitoring; import org.jbehave.scenario.JUnitScenario; import org.jbehave.scenario.definition.StoryDefinition; import org.jbehave.scenario.steps.Steps; import org.junit.runner.Description; import org.junit.runner.Runner; import org.junit.runner.notification.RunNotifier; public class JUnitReportingRunner extends Runner { private JUnitScenario testInstance; private final Description storyDescription; private final JUnitDescriptionGenerator descriptionGenerator = new JUnitDescriptionGenerator(); private final ReflectionHelper reflectionHelper; public JUnitReportingRunner(Class<? extends JUnitScenario> testClass) { reflectionHelper = new ReflectionHelper(this.getClass(), testClass); StoryDefinition story = reflectionHelper.reflectMeAConfiguration().forDefiningScenarios() .loadScenarioDefinitionsFor(testClass); Steps candidateSteps = reflectionHelper.reflectMeCandidateSteps(); storyDescription = descriptionGenerator.createDescriptionFrom(story, candidateSteps, testClass); } @Override public Description getDescription() { return storyDescription; } @Override public void run(RunNotifier notifier) { JUnitScenarioReporter reporter = new JUnitScenarioReporter(notifier, storyDescription); testInstance = reflectionHelper.reflectMeATestInstance(reporter); try { testInstance.runScenario(); } catch (Throwable e) { throw new RuntimeException(e); } } }