JBehave가 테스트를 파일 시스템에서 찾은 순서대로 실행하기 때문에 이러한 상황이 발생합니다. 나는,이 경우
@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의의 StoryFinder 클래스를 확장하고 findClassNames을 무시할 수()는 (프로퍼티, 등의 build.xml 파일) 어딘가에 저장 한 정렬 된 목록을 사용하는 내가 실행할 명령 테스트의 목록이 포함되어 내 개미 build.xml 파일을 구문 분석하여 orderedTestListArray를 검색 :
private String[] retrtieveTestNamesFromBuildXml() {
String[] orderedTestListArray = null;
InputStream iStream = null;
try {
File file = new File("build.xml");
if(file.exists()) {
iStream = new FileInputStream(file);
DocumentBuilderFactory docFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder docBuilder = docFactory.newDocumentBuilder();
Document doc = docBuilder.parse(iStream);
NodeList propertyNodes = doc.getElementsByTagName("property");
String orderedTestListString = null;
for (int i = 0; i < propertyNodes.getLength(); i++) {
Element elementNode = (Element) propertyNodes.item(i);
if(elementNode.getAttribute("name").equals("xed.tests.to.run")) {
orderedTestListString = elementNode.getAttribute("value");
break;
}
}
orderedTestListArray = orderedTestListString.split(",");
for(int i = 0; i <= orderedTestListArray.length-1; i++) {
orderedTestListArray[i] = orderedTestListArray[i].trim();
orderedTestListArray[i] = orderedTestListArray[i].substring(3, orderedTestListArray[i].length());
}
}
}
catch (Exception e) {
System.out.println("Error parsing XML info from build.xml");
e.printStackTrace();
System.exit(1);
}
finally {
try
{
if(iStream != null)
iStream.close();
}
catch (IOException e)
{
System.out.println("Error closing InputStream for build.xml");
e.printStackTrace();
}
}
return orderedTestListArray;
}
을 마지막으로, 다음과 같이 개미 또는 받는다는에서 실행하는 동안이 새로운 StoryFinder 클래스를 지정해야합니다
를
storyFinderClass=fullyQualifiedNameOfNewStoryFinderClass