1、CopyRight.java
package com.ats.annotation; public @interface CopyRight { String value(); }
2、UnitTest.java
package com.ats.annotation; import java.lang.annotation.Retention; import java.lang.annotation.Target; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.ElementType; @Retention(RetentionPolicy.RUNTIME) @Target(ElementType.METHOD) public @interface UnitTest { }
3、Foo.java
package com.ats.test; import com.ats.annotation.UnitTest; public class Foo { @UnitTest public static void m1() { } @UnitTest public static void m2() { throw new RuntimeException("Crash"); } @UnitTest public static void m3() { } public static void m4() { } public static void m5() { throw new RuntimeException("Crash"); } }
4、RunTests.java
package com.ats.test; import java.lang.reflect.Method; import com.ats.annotation.CopyRight; import com.ats.annotation.UnitTest; @CopyRight("2012 NEOHOPE") public class RunTests { public static void main(String[] args) throws Exception { int passed = 0, failed = 0; for (Method m : Class.forName("com.ats.test.Foo").getMethods()) { if (m.isAnnotationPresent(UnitTest.class)) { try { m.invoke(null); passed++; } catch (Throwable ex) { System.out.printf("Test %s failed: %s %n", m, ex.getCause()); failed++; } } } System.out.printf("Passed: %d, Failed %d%n", passed, failed); } }