当故事驱动时,可以给出一个> 1 JBhave步骤?

时间:2013-05-13 15:14:09

标签: bdd jbehave

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

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

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

ServiceSteps.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步课程?

1 个答案:

答案 0 :(得分:2)

这是由配置组织的。在JBehave的说法中,Configuration是告诉JBehave框架如何将* .stories与* Steps.java关联的类。在questioniers示例中,这是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运行两个不同的步骤文件。