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的主要内容,如果未能解决你的问题,请参考以下文章

Junit无法返回模拟的响应并以null返回

java 类方法的注解的继承问题

@Mock MessageSource 在 Junit 测试中始终为 getMessage 返回 null

class.getAnnotation 和 getAnnotations 不能正常工作

JPA 和Hibernate annotation区别

Websocket 的单元测试返回 Null