我创建了一个带有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步课程?
答案 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运行两个不同的步骤文件。