Java 顺序运行jbehave故事
我正在尝试按顺序运行jbehave故事 我的集成测试包结构如下所示Java 顺序运行jbehave故事,java,integration-testing,jbehave,Java,Integration Testing,Jbehave,我正在尝试按顺序运行jbehave故事 我的集成测试包结构如下所示 src/it/some/package/name/packageA/a.story src/it/some/package/name/packageB/b.story src/it/some/package/name/c.story import org.junit.AfterClass; import org.junit.BeforeClass; import org.junit.runner.RunWith; import
src/it/some/package/name/packageA/a.story
src/it/some/package/name/packageB/b.story
src/it/some/package/name/c.story
import org.junit.AfterClass;
import org.junit.BeforeClass;
import org.junit.runner.RunWith;
import org.junit.runners.Suite;
@RunWith(Suite.class)
@Suite.SuiteClasses({ A.class,B.class,
C.class })
public class SampleTesterSequence {
@BeforeClass
public static void beforeStories() throws Exception {
//TODO Implement before story steps
}
@AfterClass
public static void afterStories() throws Exception {
//TODO Implement after story steps
}
}
我想让这个故事按照这个顺序进行
我尝试在jBehave中使用,但它们似乎不起作用,可能是我没有正确地指定它们。如果有人能指出GivenStories文本的创建,并在jbehave运行集成测试时展示如何创建顺序,我将非常感激,因为我看到在我的机器和jenkins上运行故事似乎会产生不同的执行顺序
在此方面的任何帮助都将不胜感激。谢谢 我猜这个反应可能有点晚了,但无论如何。我们也在尝试JB,但似乎仍然有很多问题需要解决,尤其是在现实世界中 我们已经给出了在一个模块中工作的故事,但是如果您尝试跨模块调用,例如您有一个包含您想要调用的公共故事的依赖jar,那么这似乎根本不起作用 但在同一模块中,请确保将GS条目放置在故事中的正确位置,如下所示:
Story: Running BBB
GivenStories: com/xxx/test/stories/test_aaa_user.story
Given a BBB string
When I set BBB to activate
Then the BBB string is set to activate
storyFinderClass=fullyQualifiedNameOfNewStoryFinderClass
这是在BBB故事之前的AAA故事。我猜这个反应可能有点晚,但无论如何。我们也在尝试JB,但似乎仍然有很多问题需要解决,尤其是在现实世界中 我们已经给出了在一个模块中工作的故事,但是如果您尝试跨模块调用,例如您有一个包含您想要调用的公共故事的依赖jar,那么这似乎根本不起作用 但在同一模块中,请确保将GS条目放置在故事中的正确位置,如下所示:
Story: Running BBB
GivenStories: com/xxx/test/stories/test_aaa_user.story
Given a BBB string
When I set BBB to activate
Then the BBB string is set to activate
storyFinderClass=fullyQualifiedNameOfNewStoryFinderClass
这是在BBB之前的AAA故事。我实际上找到了一个解决这个问题的方法,我认为这比GivenStories方便得多 首先,我添加了一个maven surefire配置,如下所示
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>${surefire.version}</version>
<configuration>
<includes>
<include>**/*TesterSequence.java</include>
</includes>
</configuration>
</plugin>
正如你所看到的,这个组曲将按照我在组曲中提到的顺序运行故事a,b,c,当surefire运行测试时,它会查找以TesterSequence结尾的模式,并将首先运行该类,然后从该类中执行我们希望按指定顺序运行的故事。我实际上找到了解决此问题的方法,我认为这比给定的故事方便得多 首先,我添加了一个maven surefire配置,如下所示
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>${surefire.version}</version>
<configuration>
<includes>
<include>**/*TesterSequence.java</include>
</includes>
</configuration>
</plugin>
正如你所看到的,这个组曲将按照我在组曲中提到的顺序运行故事a,b,c,当surefire运行测试时,它会查找以TesterSequence结尾的模式,并将首先运行该类,然后从该类中执行我们希望按指定顺序运行的故事。发生这种情况的原因是JBehave按照在文件系统中找到测试的顺序运行测试。为了避免这种情况,您可以扩展JBehave的StoryFinder类并覆盖findClassNames,以使用存储在属性文件build.xml等位置的有序列表:
@Override
public List<String> findClassNames(String searchIn, List<String> includes, List<String> excludes) {
String[] orderedTestListArray = retrtieveTestNamesFromBuildXml();
List<String> scannedTestList = scan(searchIn, includes, excludes);
System.out.println("Scanned Test List: " + scannedTestList);
List<String> finalTestList = new ArrayList<String>();
for(String x: orderedTestListArray) {
for(String y: scannedTestList) {
if(y.contains(x))
finalTestList.add(y);
}
}
System.out.println("Final Ordered Test List: " + finalTestList);
return classNames(normalise(finalTestList));
}
发生这种情况的原因是JBehave按照在文件系统中找到测试的顺序运行测试。为了避免这种情况,您可以扩展JBehave的StoryFinder类并覆盖findClassNames,以使用存储在属性文件build.xml等位置的有序列表:
@Override
public List<String> findClassNames(String searchIn, List<String> includes, List<String> excludes) {
String[] orderedTestListArray = retrtieveTestNamesFromBuildXml();
List<String> scannedTestList = scan(searchIn, includes, excludes);
System.out.println("Scanned Test List: " + scannedTestList);
List<String> finalTestList = new ArrayList<String>();
for(String x: orderedTestListArray) {
for(String y: scannedTestList) {
if(y.contains(x))
finalTestList.add(y);
}
}
System.out.println("Final Ordered Test List: " + finalTestList);
return classNames(normalise(finalTestList));
}