如何从JBehave中的其他文件夹加载故事文件

时间:2013-08-06 11:47:17

标签: java selenium-webdriver bdd jbehave

我需要将mystory.story文件和MyStory.java放在不同的文件夹中。以下是我的配置

@Override
    public Configuration configuration() {
        return new MostUsefulConfiguration()
        // where to find the stories
                .useStoryLoader(new LoadFromClasspath(this.getClass()))
                // CONSOLE and TXT reporting
                .useStoryReporterBuilder(
                        new StoryReporterBuilder().withDefaultFormats()
                                .withFormats(Format.CONSOLE, Format.HTML));
    }

    // Here we specify the steps classes
    @Override
    public List<CandidateSteps> candidateSteps() {
        // varargs, can have more that one steps classes
        return new InstanceStepsFactory(configuration(), new SurveySteps())
                .createCandidateSteps();
    } 

那就是我需要将文件夹结构用作

 test
  |_config
        |_MyStory.java
  |_stories
        |_my_Story.story

代替,

 test
  |_MyStory.java
  |_my_Story.story

我怎样才能实现它?

2 个答案:

答案 0 :(得分:1)

我假设您使用JUnitStory。 我认为你唯一要做的就是在类路径上放置两个目录:test/configtest/stories。默认的故事解析器是org.jbehave.core.io.UnderscoredCamelCaseResolver这将创建一个类似"org.jbehave.core.ICanLogin.java" -> "org/jbehave/core/i_can_login.story"的故事路径,这将使用org.jbehave.core.io.LoadFromClasspath加载,因为这是默认的资源加载器。由于src/stories目录位于类路径上,资源加载器将找到它。请注意,这需要将类和故事放在同一个“包”中,即如果类是com.foo.Bar(放在src/config中),那么您必须将相应的故事放入{{1 (com/foo/Bar.story)。这类似于将资源文件和java文件分离到单独的文件夹中。

答案 1 :(得分:1)

您可以覆盖默认的故事路径解析器,例如:

@Override
public Configuration configuration() {
    return new MostUsefulConfiguration()
        .useStoryPathResolver(new StoryPathResolver() {
        @Override
        public String resolve(Class<? extends Embeddable> embeddableClass) {
            return "_stories/_my_Story.story";
        }
    })
}

(当然最好在课外创建并在这里使用它,而不是匿名)。 但请记住,如果你这样做,你还需要明确指定故事文件的名称,重用某种方式将“MyClass”转换为“my_class”或创建自己的策略的jbehave功能。