Java注解与测试自动化
用例的作者和方法描述还有优先级可以用注解标注,这样代码更加简洁清晰。
1.注解的创建(修饰注解的注解)
1.1 @Target注解
- 作用:用于描述注解的使用的范围。
- ElementType 取值
- TYPE 用于描述类、接口(包括注解类型)或者enum
- FIELD 用于描述域
- METHOD 用于描述方法
- PARAMETER 用于描述参数
- CONSTRUCTOR 用于描述构造器
- 其他的可以去看源码
说明了Annotation所修饰的范围
1.2 @Retention注解
设计的生命周期:.java文件->.class文件 ->内存中的字节码。
生命周期的长度:RUNTIME > CLASS > SOURCE
1.3 用@Target与@Retention修饰注解@CaseDesc。
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface CaseDesc {
String title() ;
CaseLevel level() default CaseLevel.P2;
String author();
String desc();
boolean debug() default true;
}
上面代码用到的枚举类型
public enum CaseLevel {
P0("P0"),
P1("P1"),
P2("P2"),
P3("P3"),
P4("P4");
String case_level = "P2";
CaseLevel(String case_level) {
this.case_level = case_level;
}
public String getValue(){
return case_level;
}
}
2.注解的使用
@Test(groups = {"monitor","smoke"})
@CaseDesc(title = "校验和冒烟的测试用例", level = P4, author = "小高写bug", desc = "这个是描述", debug = false)
public void test(){
}
获取方法注解中的内容
public class AppTest {
@Test(groups = {"monitor", "smoke"})
@CaseDesc(title = "校验和冒烟的测试用例", level = P2, author = "小高写bug", desc = "这个是描述", debug = false)
public void shouldAnswerWithTrue() {
assertTrue( true );
Method[] methods = AppTest.class.getDeclaredMethods();
for (Method method:methods){
if (method.isAnnotationPresent(CaseDesc.class)){
CaseDesc caseDesc = method.getAnnotation(CaseDesc.class);
System.out.println(caseDesc.author());
System.out.println(caseDesc.desc());
}
}
}
}
|