首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >jbehave:禁用所有报告

jbehave:禁用所有报告
EN

Stack Overflow用户
提问于 2016-04-19 18:40:50
回答 1查看 5.7K关注 0票数 0

我正在使用jbehave通过ant和junit进行一些BDD风格的测试。我想禁用在运行jbehave时生成到文件的所有类型的报告,因为我目前没有使用任何报告。我正在使用以下配置初始化我的测试运行器:

代码语言:javascript
复制
@RunWith(JUnitReportingRunner.class)
public abstract class StepsRunner extends JUnitStories {

    private Configuration configuration;

    public StepsRunner() {
        super();
        configuration = new MostUsefulConfiguration();
        EmbedderControls embedderControls = configuredEmbedder()
                .embedderControls();
        embedderControls.doGenerateViewAfterStories(false);
    }

    // ...
}

这成功地阻止了任何jbehave报告视图的生成。但是,我仍然得到一个在$PWD/target/jbehave/storyDurations.props中生成的文件。

我是否可以阻止jbehave生成任何文件,包括这个文件?如果不可能,有没有办法配置jbehave,使这些文件不是在$PWD/target中创建的?

无论如何,我的ant文件正在运行jbehave测试,就好像它们是使用<junit/>任务的标准junit测试一样(我可以包含构建文件的简化版本,但没有什么神奇之处)。

EN

回答 1

Stack Overflow用户

发布于 2016-04-19 21:15:06

用我目前的解决方案回答我自己的问题(仍然欢迎其他/更好的解决方案!)。

查看jbehave源代码,可以看出StoryManager正在编写$PWD/target/jbehave/storyDurations.props中被牵连的文件。它使用configuration.storyReporterBuilder().outputDirectory()返回的位置

代码语言:javascript
复制
protected void writeStoryDurations(Collection<RunningStory> runningStories) {
    // collect story durations and cancel any outstanding execution which is
    // not done before returning
    [...]
    write(storyDurations, "storyDurations.props");
}

private void write(Properties p, String name) {
    File outputDirectory = configuration.storyReporterBuilder()
            .outputDirectory();
    try {
        outputDirectory.mkdirs();
        Writer output = new FileWriter(new File(outputDirectory, name));
        p.store(output, this.getClass().getName());
        output.close();
    } catch (IOException e) {
        e.printStackTrace();
    }
}

因此,通过向配置提供自定义StoryReporterBuilder,可以强制将报告/输出文件生成到另一个路径,如下所示:

代码语言:javascript
复制
public StepsRunner() {
    super();
    configuration = new MostUsefulConfiguration();
    final File outputDir = new File(System.getProperty("jbehave.output.dir"));
    configuration.useStoryReporterBuilder( new StoryReporterBuilder() {
        @Override
        public File outputDirectory()
        {
            return outputDir;
        }
    });
}

现在,所有jbehave输出文件都将写入jbehave.output.dir系统属性所指向的文件夹中。

从那时起,通过在ant目标中设置jbehave.output.dir系统属性,将jbehave输出目录位置的实际值从ant传递到junit就足够简单了:

代码语言:javascript
复制
<junit>
  <sysproperty key="jbehave.output.dir" value="/tmp/jbehave/output/" />
  <batchtest>
     ...
  </batchtest>
</junit>
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36715972

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档