Jbehave在@BeforeStory中获得故事名称

时间:2013-05-22 17:47:39

标签: jbehave

我想在使用@BeforeStory注释的方法中获取Story名称。

我需要这个用于调试目的,因为我正在使用runStoriesAsPaths和多个线程运行一堆故事,而我正在尝试记录线程运行的故事。

有办法做到这一点吗?

提前谢谢。

2 个答案:

答案 0 :(得分:3)

首先你需要创建一个新的StoryReporter(扩展该类)。在该类中,您可以添加要在故事/场景/步骤之前/之后执行的操作,并且您具有故事名称。 例如:

public class NewStoryReporter implements StoryReporter {

private StoryReporter delegate;

public NewStoryReporter(StoryReporter delegate) {
    this.delegate = delegate;
}

@Override
public void beforeStory(Story story, boolean givenStory) {
    delegate.beforeStory(story, givenStory);
}

@Override
public void beforeScenario(String scenarioTitle) {
    delegate.beforeScenario(scenarioTitle);
}

@Override
public void beforeStep(String step) {
    if(step.equals("When after each step")){
        return;
    }
    delegate.beforeStep(step);
}

然后你需要扩展StoryReporterBuilder,这会创建你的NewStoryReporter。 例如:

public class NewStoryReporterBuilder extends StoryReporterBuilder {

@Override
public StoryReporter build(String storyPath) {
    StoryReporter delegate = super.build(storyPath);
    return new NewStoryReporter(delegate);
}

}

然后在您的配置中,创建NewStoryReporterBuilder的实例,并在

中使用它
Configuration configuration = new YourConfiguration().useStoryReporterBuilder(newStoryReporterBuilder....)

答案 1 :(得分:0)

现在在Jbehave中,它以不同的方式配置。

因此,要实现这一目标,您需要:

  1. 创建扩展org.jbehave.core.reporters.ConsoleOutput的新类。在这里你可以修改各种方法。在您的情况下 - 您需要覆盖方法:

    public void beforeScenario(String title)
    

    查看本文末尾附带的示例,了解如何完成。

  2. 创建抽象类的新实例org.jbehave.core.reporters.Filter:

    public static final Format YOUR_CUSTOM_CONSOLE = new Format("YOUR_CUSTOM_CONSOLE")
    {
        @Override
        public StoryReporter createStoryReporter(FilePrintStreamFactory factory,
                StoryReporterBuilder storyReporterBuilder) {
            return new TeamCityConsoleOutput(storyReporterBuilder.keywords()).doReportFailureTrace(
                    storyReporterBuilder.reportFailureTrace()).doCompressFailureTrace(
                    storyReporterBuilder.compressFailureTrace());
        }
    };
    
  3. 然后,您需要将此格式添加到您在配置中使用的故事构建器中,这意味着:

    new MostUsefulConfiguration()
                .useStoryReporterBuilder(
                        new StoryReporterBuilder()
                                ....//here are another modifications of sorey report builder
                                .withFormats(YOUR_CUSTOM_CONSOLE , .../* another formats */ HTML, Format.XML, Format.TXT))
                ....//here are another modifications of configuration
                .useStepMonitor(new CrossReference().getStepMonitor());
    
  4. 以下是此类修改的示例,可用于与TeamCity集成: https://github.com/jbehave/jbehave-core/blob/d15774bf763875662869cdc89ce924b1086af6f8/jbehave-core/src/main/java/org/jbehave/core/reporters/TeamCityConsoleOutput.java