beforeScenario和afterScenario如何在JBehave中运行

时间:2018-06-05 13:00:34

标签: jbehave

有人可以举例说明之前的场景和AfterScenario如何在JBehave中运行吗?

我创建了一个类,其中包含两个方法gearUp @BeforeScenario 和tearDown with @AfterScenario 注释。

但是这些方法永远不会在JBehave中调用。

需要哪些额外配置。任何代码示例都会对我们有所帮助。

虽然这种简单而又整洁的黄瓜。

以下是我的故事文件,单步(src / test / resources / storeis):

Scenario:  SampleTest

Given I am test

以下是我的步骤文件

public class jbehavetc {

    @Given("I am test")
    public void startOnUrl(String url) {
       System.out.println("I am actual test");
    }
}

以下是我的Hooks文件,其中包含BeforeScenario和AfterScenario方法

public class Hooks {

    @BeforeScenario
    public void startSystem() throws Exception {
       System.out.println("I am before scenario");
    }

    @AfterScenario
    public void stopSystem() throws Exception {
       System.out.println("I am after scenario");
    }

}

为了运行上面的故事,我创建了一个跑步者文件并希望以JUnit测试运行(纠正我这不是正确的方法

public class JBehaveRunner extends JUnitStory{


    @Override
    public Configuration configuration() {
        return new MostUsefulConfiguration()
            .useStoryLoader(
                new LoadFromClasspath(getClass().getClassLoader()))
            .useStoryReporterBuilder(   
                new StoryReporterBuilder()
                    .withDefaultFormats()
                    .withFormats(Format.HTML));
    }

    @Override
    public InjectableStepsFactory stepsFactory() {
        return new InstanceStepsFactory(configuration(), new jbehavetc(), 
            new Hooks());
    }

    public List<String> storyPaths() {
        return new StoryFinder().findPaths(
            CodeLocations.codeLocationFromClass(this.getClass()),
            Arrays.asList("**/*.story"),
            Arrays.asList(""));
    }

    @Test
    public void run() throws Throwable {
        super.run();
    }
}

当我作为JUnit测试运行在跑步者之上时,没有任何事情被执行。我怎么能跑到故事之上呢?我想在运行此运行器或故事文件时需要调用之前和之后的场景方法。

2 个答案:

答案 0 :(得分:1)

您应该使用@BeforeScenario / @AfterScenario作为具有步骤实现的类处理类:您应该在步骤工厂中注册它们。

  

<强> BeforeAndAfterSteps.java

public class BeforeAndAfterSteps {

    @BeforeScenario
    public void beforeScenario() throws Exception {
        // setup
    }

    @AfterScenario
    public void afterScenario() throws Exception {
        // teardown
    }
}
  

步骤出厂配置示例

new InstanceStepsFactory(configuration, new BeforeAndAfterSteps())

官方JBehave示例:

答案 1 :(得分:0)

以下转轮文件开始为我工作:

public class JBehaveRunner extends JUnitStories {

    @Override
    public Configuration configuration() {
        return new MostUsefulConfiguration()
            .useStoryLoader(
                new LoadFromClasspath(getClass().getClassLoader()))
            .useStoryReporterBuilder(
                new StoryReporterBuilder()
                    .withDefaultFormats()
                    .withFormats(Format.HTML));
    }

    @Override
    public InjectableStepsFactory stepsFactory() {
        return new InstanceStepsFactory(configuration(), new HomePageSteps(), 
            new BaseEngine());
    }

    @Test
    public void run() throws Throwable {
        super.run();
    }

    @Override
    public List<String> storyPaths() {
        return new StoryFinder().findPaths(
            CodeLocations.codeLocationFromClass(this.getClass()),
            Arrays.asList("**/*.story"),
            Arrays.asList(""));    
    }
}