14Junit、反射、注解

14.1.1 Junit的概述       一般IDE都内置了junit,若需要自行下载jar包,

  1. 特点
       - 方法命名规则:以test开头,使用驼峰命名法。
       - 方法声明上:必须使用注解:@Test,必须使用public修饰符,没有返回值,方法没有参数。
      
  2. 运行测试方法
       - 选中方法名:右键 –> Run 测试方法名,则运行选中的测试方法
         比如测试方法名为testSum,则右键 –> Run testSum
       - 选中类名:右键 –> Run 类名,则运行该类的所有测试方法
         比如类名为TestCalculte,则右键 –> Run TestCalculte
       - 选中模块名或项目名:右键 –> Run ‘All Tests’,则运行整个模块中所有类的所有测试方法。
  3. 查看测试结果
       - 绿色:表示测试通过,
       - 红色:表示失败或出现错误,
      

14.1.2 常用注解

  • @Before:在每个测试方法之前都会运行一次
  • @After:在每个测试方法运行以后运行的方法
  • @BeforeClass:在所有的测试方法运行之前,只运行一次,而且必须用在静态方法上面。
  • @AfterClass:所有的测试方法运行以后,只运行一次,必须用在静态方法上面。
  • 业务类
•   
    /** 
     业务类 
     */ 
    public class Calculate { 
        /* 
           求a和b之和 
         */ 
        public int sum(int a,int b){ 
            return a + b; 
       } 
   
        /** 
         求a和b之差 
         */ 
        public int sub(int a,int b){ 
            return a - b; 
       } 
   } 
 • 测试类 
  
    import org.junit.*; 
   
    public class Test2 { 
   
        @BeforeClass 
        public static void testBeforeClass() { 
            System.out.println(“类加载时, 只运行一次.”); 
       } 
   
        @Before 
        public void testBefore() { 
            System.out.println(“测试方法运行前被执行 …”); 
       } 
   
        @Test 
        public void testSum() { 
            Calculator calculator = new Calculator(); 
            int sum = calculator.sum(10, 20); 
            System.out.println(“sum = ” + sum); 
       } 
   
        @Test 
        public void testSub() { 
            Calculator calculator = new Calculator(); 
            int sub = calculator.sub(100, 20); 
            System.out.println(“sub = ” + sub); 
       } 
   
        @After 
        public void testAfter() { 
            System.out.println(“每个测试方法被执行后执行 …”); 
       } 
   
        @AfterClass 
        public static void testAfterClass() { 
            System.out.println(“类结束前, 只执行一次.”); 
       } 
   }

  •    输出结果 :
       类加载时, 只运行一次.
       测试方法运行前被执行 …
       sub = 80
       每个测试方法被执行后执行 …
       测试方法运行前被执行 …
       sum = 30
       每个测试方法被执行后执行 …
       类结束前, 只执行一次.

14.2 反射

14.2.1 反射的基本概念

        2.1 什么是反射

                反射是一种机制,利用该机制可以在程序运行过程中对类进行解剖并操作类中的方法,属性,构造方法等成员。

        2.2 使用反射机制解剖类的前提

    必须先要获取到该类的字节码文件对象,即Class类型对象。关于Class描述字节码文件如下图所示:

tips:

1)Java中使用Class类表示某个class文件.

2)任何一个class文件都是Class这个类的一个实例对象.

        2.3 获取Class对象的三种方式

  • 创建测试类:Student
 
    public class Student { 
        // 属性 
       
        // 行为 
   } 
  
  
 
  • 2.2.1 方式1:通过类名.class获取  
•       @Test 
        public void test1() { 
            // 方式一 : 通过类名获取 class 对象 
            // 格式 : 类名.class 属性 
            // 常用场景 : 反射获取方法时, 确定方法的形参列表类型 
            Class cls = Student.class; 
            System.out.println(“cls = ” + cls); 
       } 
   
    输出结果 : 
    cls = class cn.itcast.test2.Student 
  
  
  
 2.2.2  方式2:通过Object类的成员方法getClass()方法获取 
  
        @Test 
        public void test2() { 
   
            // 1. 创建一个 Student 类型的对象 
            Student stu = new Student(); 
   
            // 2. 调用方法, 并传入 stu 对象 
            showInfo(stu); 
       } 
   
        public void showInfo(Object obj) { 
   
            // 方式二 : 使用对象名调用 getClass() 方法. 
            // 格式 : 对象名.getClass() 方法. 
            // 使用场景 : 在方法内部, 确定传入形参的真实类型. 
   
            Class