JUnit getAnnotation返回null
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JUnit getAnnotation返回null相关的知识,希望对你有一定的参考价值。
我想运行一个简单的规则,如果它有一个特定的注释,它会尝试重新运行测试。具体来说,它会尝试通过从cusotm注释读取try int来多次重新运行测试。
这是我创建的自定义注释:import java.lang.annotation.ElementType; import java.lang.annotation.Target;
@Target(ElementType.METHOD)
public @interface Retry {
int tries();
}
这是我创建的自定义规则:
public class RetryRule implements TestRule {
@Override
public Statement apply(final Statement base, final Description description) {
if( description.getAnnotation(Retry.class) == null ) {
System.out.println("Hm...");
return base;
}
int tries = description.getAnnotation(Retry.class).tries();
return new Statement() {
@Override
public void evaluate() throws Throwable {
while(true) {
int i = 1 ;
try {
i++;
base.evaluate();
return ;
} catch (AssertionError ex) {
if( i >= tries ) {
return ;
}
}
}
}
};
}
}
问题是每当我使用自定义注释和自定义规则运行测试时,它总是只运行一次。我检查过,并且getAnnotation(....)在任何情况下都返回null - 如果指定了cusotm注释或者没有。
答案
您的注释在运行时才会保留。使用@Retention(RetentionPolicy.RUNTIME)
以上是关于JUnit getAnnotation返回null的主要内容,如果未能解决你的问题,请参考以下文章
@Mock MessageSource 在 Junit 测试中始终为 getMessage 返回 null