有没有办法记录testNG测试用例,以便自动生成文档?我想象的是:
@Description("This testcase checks, whether the system is alive")
@Step("Check whether services are running")
@Step("Try to access the system webpage")
...
@Test(groups={"sanity"})
public void checkStatus() {
...
}
我考虑了两个选项:自定义注释处理和为javadoc编写自己的doclet。在我尝试任何这些选项之前,我想知道,是否有一种标准的方法。我肯定希望重用当前的testNG注释,尤其是测试的分组。
最后但并非最不重要的是,我想提一下,我想将这种方法仅用于系统级测试(非单元测试),我非常复杂,并且不容易说出测试的作用是什么测试名称或其代码。
答案 0 :(得分:5)
最后,我自己弄清楚了。我使用javadoc结合一点注释处理(只是为了区分测试用例组)。我使用自定义doclet,它首先按以下方式构建测试用例列表:
private MethodDoc[] getTestMethods(RootDoc root) {
List<MethodDoc> result = new ArrayList<MethodDoc>();
for (ClassDoc c : root.classes()) {
for(MethodDoc m : c.methods()) {
if (isTest(m))
result.add(m);
}
}
return result.toArray(new MethodDoc[0]);
}
// simplified test detection
private static boolean isTest(MethodDoc m) {
for(AnnotationDesc a: m.annotations()) {
if (a.annotationType().name().equals("Test"))
return true;
}
return false;
}
然后,对于每个测试,我检索一组组:
static Set<String> getMethodGroups(MethodDoc m) {
Set<String> result = getGroups(m);
result.addAll(getGroups(m.containingClass()));
return result;
}
static Set<String> getGroups(ProgramElementDoc m) {
Set<String> result = new HashSet<String>();
for(AnnotationDesc a: m.annotations()) {
if (a.annotationType().name().equals("Test")) {
for(ElementValuePair ev : a.elementValues()) {
if (ev.element().name().equals("groups")) {
String value = ev.value().toString();
StringTokenizer tokenizer = new StringTokenizer(value, "{}\", ");
while (tokenizer.hasMoreElements()) {
result.add(tokenizer.nextToken());
}
}
}
}
}
return result;
}
其余的只是标准的doclet处理。另外,我发现我可以直接在javadoc中使用自定义标签,例如
/**
* Some description
* @Step Step 1
* @Step Step 2
*/
void someMethod() {}