JUnit

作者: 沉浮_0644 | 来源:发表于2018-12-13 23:17 被阅读0次
    • 先创建一个注解类
    package cn.tedu.demo;
    
    import java.lang.annotation.ElementType;
    import java.lang.annotation.Retention;
    import java.lang.annotation.RetentionPolicy;
    import java.lang.annotation.Target;
    
    /**
     * 自定义注解
     * 定义其特殊含义为单元测试功能。
     * Retention:作用是组件的传播范围,取值RUNTIME时候,注解将传播到“运行期间”(默认SOURCE)
     * Target:指标注位置。METHOD:方法.(默认值是任何位置都可以标注)
     *
     *@Retention 和  @Target其“特殊意义”由Java编译器负责处理解析。
     */
    
    @Retention(RetentionPolicy.RUNTIME)
    @Target(ElementType.METHOD)
    public @interface Test {
    
    }
    
    • 写一个被写测试类,在方法上标注注解
    package cn.tedu.demo;
    
    public class TestCase {
        /**
         * 在方法上标注  自定义注解 @Test
         * 由于注解Test的传播属性的是RUNTIME,所以Test注解会一直传播到软件运行期间(方法区中)
         */
        @Test
        public void test() {
            System.out.println("Hello JUnit");
        }
        @Test
        public void demo() {
            System.out.println("Demo");
        }
    }
    
    • 主函数
    package cn.tedu.demo;
    
    import java.lang.reflect.Method;
    
    public class Junit4 {
        
        public static void main(String[] args) throws Exception {
            /**
             * JUnit4的原型
             * 
             * 1、动态加载被测试的类
             * 2、动态创建被测试的对象
             * 3、动态查找测试类中标注了 @Test 注解的测试方法
             * 4、利用反射在对象上调用测试方法
             * 
             * 通过如上代码解析@Test注解,为注解实现其特殊功能,就是自动执行标注了@Test的方法
             */
            
            //动态加载类(这里测试线写死)
            String className = "cn.tedu.demo.TestCase";
            Class cls = Class.forName(className);
            
            //利用反射动态创建cls类型的实例
            Object object= cls.newInstance();
            
            //找到所有方法
            Method[] methods = cls.getDeclaredMethods();
            
            for(Method method : methods) {
                //查找包含 @Test 注解的方法
                Test test = method.getAnnotation(Test.class);
                
                if(test != null) {
                    //利用反射调用方法
                    method.invoke(object);
                }
            }
        }
    }
    

    相关文章

      网友评论

          本文标题:JUnit

          本文链接:https://www.haomeiwen.com/subject/qzliaftx.html