我正在使用jbehave通过ant和junit进行一些BDD风格的测试。我想禁用在运行jbehave时生成到文件的所有类型的报告,因为我目前没有使用任何报告。我正在使用以下配置初始化我的测试运行器:
@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测试一样(我可以包含构建文件的简化版本,但没有什么神奇之处)。
发布于 2016-04-19 21:15:06
用我目前的解决方案回答我自己的问题(仍然欢迎其他/更好的解决方案!)。
查看jbehave源代码,可以看出StoryManager正在编写$PWD/target/jbehave/storyDurations.props中被牵连的文件。它使用configuration.storyReporterBuilder().outputDirectory()返回的位置
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,可以强制将报告/输出文件生成到另一个路径,如下所示:
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就足够简单了:
<junit>
<sysproperty key="jbehave.output.dir" value="/tmp/jbehave/output/" />
<batchtest>
...
</batchtest>
</junit>https://stackoverflow.com/questions/36715972
复制相似问题