6.35 使用Annotation替代命名模式

一般测试框架类,如JUnit,TestNG都可以通过设置指定具有某些名称的方法为测试方法,如以test开头的方法为测试方法,这样做的缺点包括:

1.如果方法名称拼写错误,不会有任何提示。如误拼为tsetHello(),测试时此方法不会被执行,但是也不会有任何错误提示

 

2.可能误执行其他方法,如testSafety()可能是业务方法,但因为符合测试方法的命名模式(以test开头的方法),所以在测试时会被调用

 

3.不能传递输入参数值给测试方法

 

使用Annotation可以避免以上问题,如以下使用方式:

 

	//使用@Test标记测试方法
	@Test
	public void sayHello(){}
	
	//通过设置@Test的dataProvider指定测试数据提供者
	@Test(dataProvider="dataProvider1")
	public void sayOK(String key,String value){}

 

 

以下简单介绍Annotation的使用。Annotation使用@interface声明,在某些情况下Annotation可视为接口(代替接口的功能),以下为自定义Annotation类:

 

@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface MyAnnotation {
	String value() default "OK";
}

 

 

@Documented指定在生成javadoc时,需要同时生成Annotation的帮助文档说明。如果Annotation与业务相关,一般需要生成说明文档

 

@Retention指定Annotation信息的保持策略,目前包含三种策略:SOURCE/CLASS/RUNTIME,分别对应把Annotation信息保持在源码里/编译后的class文件里/运行时加载到JVM里

 

@Target指定Annotation的应用目标,如上例设置为ElementType.METHOD,那么MyAnnotation仅能用于方法(method)上

 

Annotation的方法,如上例的value(),用于指定Annotation的参数值。方法的返回值仅能使用基本数据类型,String,Enum,Class,Annotation类型(包括对应的数组)。如果Annotation仅有一个参数,那么

建议方法名称为“value”。建议使用default指定方法的默认返回值

 

使用反射可获取目标所使用的Annotation,如下:

	@Test
	@MyAnnotation("OK")
	public void testAnnotation() throws Exception{
		Method method=AnnoTest.class.getDeclaredMethod("testAnnotation");
		MyAnnotation myAnnotation=method.getAnnotation(MyAnnotation.class);
		Assert.assertEquals(myAnnotation.value(), "OK");
	}

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值