定义Annotation

2017-10-12 09:49:00
admin
原创
314
import java.lang.reflect.*;
import java.lang.annotation.*;
public class RunTests
{
 public static void main(String[] args) throws Exception
 {
  //处理MyTest类
  TestProcessor.process("MyTest");
 }
}

class TestProcessor
{
 public static void process(String clazz)
  throws ClassNotFoundException
 {
  int passed = 0;
  int failed = 0;
  //遍历obj对象的所有方法
  for (Method m : Class.forName(clazz).getMethods())
  {
   //如果包含@Testable标记注释
   if (m.isAnnotationPresent(Testable.class))
   {
    try
    {
     //调用m方法
     m.invoke(null);
     //passed加1
     passed++;
    }
    catch (Exception ex)
    {
     System.out.printf("方法" + m + "运行失败,异常:" + ex.getCause() + "\n");
     failed++;
    }
   }
  }
  //统计测试结果
  System.out.printf("共运行了:" + (passed + failed)+ "个方法,其中:\n" +
   "失败了:" + failed + "个,\n" + 
   "成功了:" + passed + "个!\n");
 }
}

class MyTest
{
 //使用@Testable标记注释指定该方法是可测试的
 @Testable
 public static void m1()
 {
 }
 public static void m2()
 {
 }  
 //使用@Testable标记注释指定该方法是可测试的
 @Testable
 public static void m3()
 {       
  throw new RuntimeException("Boom"); 
 }
 public static void m4()
 {
 }      
 //使用@Testable标记注释指定该方法是可测试的
 @Testable
 public static void m5()
 {
 } 
    public static void m6()
 {
 }
 //使用@Testable标记注释指定该方法是可测试的
 @Testable
 public static void m7()
 {           
  throw new RuntimeException("Crash");  
 }       
 public static void m8()
 {
 }
}


 
@Retention(RetentionPolicy.RUNTIME)   
@Target(ElementType.METHOD)
//定义Testable Annotation将被javadoc工具提取
@Documented
@interface Testable
{
}
文章分类
联系我们
电话: 18902328227
Email: 2689701946@qq.com
QQ: 2689701946
微信: 18902328227
地址: 广州番禺区繁华路
  • 在线客服
  • 关注微信
  • 联系电话
    • 欢迎咨询
    • 欢迎加入QQ群 303257430
  • 公众号:源宝网络
    • 联系电话及微信号 18902328227