从junit测试中获取自定义方法注释值

时间:2015-12-04 21:46:43

标签: java junit annotations

我有一个junit测试,我想在方法上使用注释来定义测试设置。

我有一个测试类的超类,我已经抽象了一些处理,并且我想读取方法注释值。

我已经看到通过循环遍历类来读取方法注释的示例。我不确定这会对我需要的东西起作用。如何找到调用的测试方法,然后读取这些特定的注释值(TrialMethod.name)?

public class MyUTest extends Processor{

    @Test
    @TrialMethod(name = "methodToBeTested")
    public void testMethod() throws Exception {
        //assert stuff
    }

}


public class Processor extends TestCase{

    private TrialMethodModel trialMethodModel = new TrialMethodModel();

    private void setMethodNameByAnnotation() {
        Class<?> clazz = this.getClass();
        Class<TrialMethod> trialMethodClass = TrialMethod.class;

        for (Method method : clazz.getDeclaredMethods()){

            if (method.isAnnotationPresent(trialMethodClass)){
                trialMethodModel.setName(method.getAnnotation(trialMethodClass).name());
            }
        }
    }
}

@Documented
@Target(ElementType.METHOD)
@Retention(value=RetentionPolicy.RUNTIME)
public @interface TrialMethod {

    String name();

}

1 个答案:

答案 0 :(得分:0)

我了解到你可以通过junit类访问junit方法。然后获取注释值是微不足道的。

private void setTrialMethodByAnnotation() {

    Class<?> clazz = this.getClass();
    Class<TrialMethod> trialMethod = TrialMethod.class;

    Method method = null;
    try {
        method = clazz.getMethod(this.getName(),null);
    } catch (SecurityException e) {
        logger.error(e.getMessage());
    } catch (NoSuchMethodException e) {
        logger.error(e.getMessage());
    }

    if(method.isAnnotationPresent(trialMethod)){
        trialMethodModel.setName(method.getAnnotation(trialMethod).name());
        ...
    }
}