我想在一个带有注释的方法中获取 Story 名称@BeforeStory
。
我需要这个来进行调试,因为我正在使用多个线程运行一堆故事runStoriesAsPaths
,并且我正在尝试记录哪个线程正在运行哪个故事。
有没有办法做到这一点?
我想在一个带有注释的方法中获取 Story 名称@BeforeStory
。
我需要这个来进行调试,因为我正在使用多个线程运行一堆故事runStoriesAsPaths
,并且我正在尝试记录哪个线程正在运行哪个故事。
有没有办法做到这一点?
首先,您需要创建一个新的 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....)
现在在 Jbehave 中,它以不同的方式配置。
因此,要实现该目标,您需要:
创建扩展 org.jbehave.core.reporters.ConsoleOutput 的新类。在这里您可以修改各种方法。在您的情况下 - 您需要覆盖方法:
public void beforeScenario(String title)
检查这篇文章末尾附加的示例,看看它是如何完成的。
创建抽象类 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());
}
};
然后,您需要将此格式添加到您在配置中使用的故事构建器中,这意味着:
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());
以下是此类修改的示例,可用于与 TeamCity 集成: https ://github.com/jbehave/jbehave-core/blob/d15774bf763875662869cdc89ce924b1086af6f8/jbehave-core/src/main/java/org/jbehave/core/记者/TeamCityConsoleOutput.java