1

我创建了一个带有 Given When Then (GWT) 的 .story 文件。

Contact_List.story 场景:发现联系人给定我有一个朋友的联系人列表当其中一个在线时,该朋友显示在列表中

我想要两个级别的测试(一堆快速服务层测试和一些 UI 测试)。所以我使用完全相同的 GWT 语言创建了以下内容:

服务步骤.java

@Given("I've a contact list of friends")
...

UISteps.java

@Given("I've a contact list of friends")
....

并配置 JBehave 以使用它们:RunBDDTests.java

...
@Override
public InjectableStepsFactory stepsFactory() {       
    // varargs, can have more that one steps classes
    return new InstanceStepsFactory(configuration(), new ServiceSteps(), new UISteps());
}
...

但是,当在 JUNit 中运行它时,每次我运行测试时,它选择哪个 Steps 类都是随机的。

如何让它每次都运行两个步骤,以便一个 .story 文件驱动 > 1 个步骤类?

4

1 回答 1

2

这是由配置组织的。用 JBehave 的说法,Configuration 是告诉 JBehave 框架如何将 *.stories 与 *Steps.java 关联起来的类。在提问者示例中,这是 RunBDDTests.java。将两个步骤与单个 GWT 场景相关联的一种选择是创建两个配置,一个用于服务步骤,一个用于 UI 步骤:

ServiceConfiguration.java

public class ServiceConfiguration extends JUnitStories
{
 @Override
 public InjectableStepsFactory stepsFactory() {       

    return new InstanceStepsFactory(configuration(), new ServiceSteps()); // <- note steps class
 }

@Override
protected List<String> storyPaths() {

    return new StoryFinder().findPaths(CodeLocations.codeLocationFromClass(this.getClass()), "**/Contact_List.story", "");  //<- note story file name
}
}

UIConfiguration.java

public class UIConfiguration extends JUnitStories
{
    @Override
    public InjectableStepsFactory stepsFactory() {              
      return new InstanceStepsFactory(configuration(), new UISteps()); // <- note steps class
    }

@Override
protected List<String> storyPaths() {       
  return new StoryFinder().findPaths(CodeLocations.codeLocationFromClass(this.getClass()), "**/Contact_List.story", "");  //<- note story file name
}
}

上述两种配置将针对一个 .story 运行两个不同的步骤文件。

于 2013-05-16T18:04:43.930 回答