我已经创建了一些自定义注释,用于通过JUnit运行的系统测试。
例如测试看起来像这样:
@TestCaseName("Change History")
public class ChangeHistory extends SystemTestBase
{
@Test
@Risk(1)
public void test()
{
...
我现在正在实施一个测试运行器,它将报告测试名称,风险以及出于文档目的的某处。
public class MyRunner extends BlockJUnit4ClassRunner
{
...
@Override
protected void runChild(final FrameworkMethod method, RunNotifier notifier)
{
...
System.out.println("Class annotations:");
Annotation[] classanno = klass.getAnnotations();
for (Annotation annotation : classanno) {
System.out.println(annotation.annotationType());
}
System.out.println("Method annotations:");
Annotation[] methanno = method.getAnnotations();
for (Annotation annotation : methanno) {
System.out.println(annotation.annotationType());
}
输出
Class annotations:
Method annotations:
interface org.junit.Test
所以getAnnotations()
似乎只返回JUnit的注释而不是所有注释。这没有提及in the documentation of JUnit:
返回此方法的注释
返回类型为java.lang.Annotation
,这让我相信我可以使用任何注释。我定义了如下注释 - 我刚刚使用它,当出现错误时我让Eclipse生成注释:
public @interface Risk {
int value();
}
如何获取测试类和测试方法的所有注释?
答案 0 :(得分:1)
您需要将Risk
注释的保留政策设置为RUNTIME
。否则,注释将在编译后被丢弃,并且在执行代码期间将不可用。
这应该有效:
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
@Retention(RetentionPolicy.RUNTIME)
public @interface Risk {
int value();
}