day14-JUnit-反射-注解 测试分类: 1. 黑盒测试:不需要写代码, 给输入值, 看程序是否能够输出期望的值 比如你下载一个APP, 随便点点点, APP闪退了 2. 白盒测试:需要写代码的. 关注程序具体的执行流程 比如今天学习的JUnit JUnit使用步骤: 1. 定义一个测试类(也叫测试用例) 包名:xxx.xxx.xx.test 被测试的类名: Calculator 对应的测试类名: CalculatorTest 2. 定义测试方法:可以独立运行 被测试的方法名: add() 对应的测试方法名: testAdd() 建议测试方法的返回值是void, 参数列表是空参 3. 在方法上加 @Test 注解 4. 在 @Test 注解上按 Alt+Enter, 选择 "Add 'JUnit4' to Classpath" 导入JUnit依赖环境 5. 在方法名上右键, 选择 "Run '方法名()'" 判定结果: 红色:失败 绿色:成功.(测试通过) 判定结果: 红色:失败 绿色:成功.(测试通过) 断言: Assert 使用断言操作来判断结果是否符合预期: Assert.assertEquals(期望的结果, 运算的结果); 如果 期望的结果 和 运算的结果 相等, 则认为测试通过, 否则测试失败 Before: 修饰的方法会"在每个测试方法执行 之前"被执行 @After: 修饰的方法会"在每个测试方法执行 之后"被执行 反射: 将类的各个组成部分, 封装为其他对象, 这就是反射机制 成员变量(字段): Field类的对象 构造方法: Constructor类的对象 成员方法: Method类的对象 好处: 1. 可以在程序运行过程中, 操作这些对象 2. 可以解耦, 提高程序的可扩展性 Java代码在计算机中的3个阶段: SOURCE: 源代码阶段 CLASS: 类对象阶段 RUNTIME: 运行时阶段 获取一个类的字节码对象的3种方式: 1. Class.forName("全类名") 将字节码文件加载进内存,返回Class对象 适用场景: 多用于配置文件,将类名定义在配置文件中. 读取文件, 加载类 2. 类名.class . 通过类名的属性class获取 适用场景: 多用于参数的传递 getConstructor(String.class, int.class) 3. 对象.getClass() getClass()方法在Object类中定义 适用场景: 多用于对象的获取字节码的方式 p.getClass() 同一个类的字节码对象, 只有"唯一的一个" 注解: 说明程序的。给计算机看的 注释: 用文字描述程序的。给程序员看的 JDK中预定义的一些注解: @Override: 检测被该注解标注的方法是否是"重写"父类(接口)的 @Deprecated: 该注解标注的内容,表示已过时 @SuppressWarnings: 压制警告. 一般传递参数all @SuppressWarnings("all") 属性: 接口中的"抽象方法" 属性的要求: 1. 属性的"返回值类型"可以是以下类型: 基本数据类型(8种) String 枚举 注解 以上类型的数组 2. 定义了属性,在使用注解时, 需要"给属性赋值" (其实是抽象方法的返回值) 1. 属性使用 default 关键字指定默认值, 则可以不赋值 2. 如果只有一个名为"value"的属性需要赋值, 则 value 可以省略, 直接写值即可 3. 给数组赋值时,值使用{}包裹。如果数组中只有一个值,则{}可以省略 元注解: 用于描述注解的注解 常用元注解: @Target: 描述注解能够作用的位置 ElementType枚举的常用取值: TYPE:可以作用于类上 METHOD:可以作用于方法上 FIELD:可以作用于成员变量上 示例: @Target(value = {ElementType.TYPE, ElementType.METHOD}) @Retention: 描述注解被保留的阶段 RetentionPolicy枚举的取值: SOURCE: 保留到源代码阶段 CLASS: 保留到类对象阶段 RUNTIME: 保留到运行时阶段 示例: @Retention(RetentionPolicy.RUNTIME):保留注解到class字节码文件中并被JVM读取到 @Documented: 加上后, 当前注解会被抽取到api文档中 @Inherited: 加上后, 当前注解会被子类继承
|