jbehave: отключить все отчеты

Я использую jbehave для тестирования стиля BDD через ant и junit. Я хотел бы отключить все виды отчетов, генерируемых в файл при запуске 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/> (я могу включить упрощенную версию файла сборки, но там ничего волшебного не происходит).


person jjst    schedule 19.04.2016    source источник


Ответы (1)


Отвечая на мой собственный вопрос с моим текущим решением (альтернативные/лучшие решения все еще приветствуются!).

Глядя на исходный код jbehave, инкриминируемый файл в $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.

С этого момента достаточно просто передать фактическое значение местоположения выходного каталога jbehave из ant в junit, установив системное свойство jbehave.output.dir в цели ant:

<junit>
  <sysproperty key="jbehave.output.dir" value="/tmp/jbehave/output/" />
  <batchtest>
     ...
  </batchtest>
</junit>
person jjst    schedule 19.04.2016