序:
我有以下注释和junit测试的规则初始化部分。 目标是使用不同的配置并使测试尽可能简单易用。
// Annotation
@Retention(RetentionPolicy.RUNTIME)
public @interface ConnectionParams {
public String username();
public String password() default "";
}
// Part of the test
@ConnectionParams(username = "john")
@Rule
public ConnectionTestRule ctr1 = new ConnectionTestRule();
@ConnectionParams(username = "doe", password = "secret")
@Rule
public ConnectionTestRule ctr2 = new ConnectionTestRule();
现在我想访问以下TestRule中的注释参数,但它找不到任何注释。
public class ConnectionTestRule implements TestRule {
public Statement apply(Statement arg0, Description arg1) {
if (this.getClass().isAnnotationPresent(ConnectionParams.class)) {
... // do stuff
}
}
}
如何在TestRule中访问注释?
答案 0 :(得分:0)
您的申请不正确。
在课程级别应用自定义注释,而不是按照您的方式应用。
// Apply on class instead
@ConnectionParams(username = "john")
public class ConnectionTestRule {....
然后你的代码应该可以工作,
public class ConnectionTestRule implements TestRule {
public Statement apply(Statement arg0, Description arg1) {
//get annotation from current (this) class
if (this.getClass().isAnnotationPresent(ConnectionParams.class)) {
... // do stuff
}
}
}
编辑:更新后的问题。
您需要首先使用反射获取字段,以便找到您创建的每个ConnectionTestRule对象,并从中获取注释以获得所需的配置。
for(Field field : class_in_which_object_created.getDeclaredFields()){
Class type = field.getType();
String name = field.getName();
//it will get annotations from each of your
//public ConnectionTestRule ctr1 = new ConnectionTestRule();
//public ConnectionTestRule ctr2 = new ConnectionTestRule();
Annotation[] annotations = field.getDeclaredAnnotations();
/*
*
*once you get your @ConnectionParams then pass it respective tests
*
*/
}