1.Junit单元测试

  1.1 测试分类

    1. 黑盒测试:不需要写代码,给输入值,看程序是否能够输出期望的值。
    2. 白盒测试:需要写代码的。关注程序具体的执行流程。

  Junit使用:白盒测试

    步骤:

      1. 定义一个测试类(测试用例)

        建议:
          测试类名:被测试的类名Test
          包名:xxx.xxx.xx.test

      2. 定义测试方法:可以独立运行

        建议:

          方法名:test测试的方法名 testAdd() 

          返回值:void

          参数列表:空参

      3. 给方法加@Test

      4. 导入junit依赖环境


  判定结果:
    红色:失败
    绿色:成功
    一般我们会使用断言操作来处理结果
      Assert.assertEquals(期望的结果,运算的结果);

 

  补充:
    @Before:
      修饰的方法会在测试方法之前被自动执行
    @After:
      修饰的方法会在测试方法执行之后自动被执行

2.注解

  2.1 概述

    定义:注解(Annotation),也叫元数据。一种代码级别的说明。它是JDK1.5及以后版本引入的一个特性,与类、接口、枚举是在同一个层次。它可以声明在包、类、字段、方法、局部变量、方法参数等的前面,用来对这些元素进行说明,注释。

    区别:

      注解:说明程序的。给计算机看的

      注释:用文字描述程序的。给程序员看的

  2.2 作用分类

    ①编写文档:通过代码里标识的注解生成文档【生成文档doc文档】

    ②代码分析:通过代码里标识的注解对代码进行分析【使用反射】
    ③编译检查:通过代码里标识的注解让编译器能够实现基本的编译检查【Override】

  2.3 JDK中预定义的一些注解

    @Override :检测被该注解标注的方法是否是继承自父类(接口)的

    @Deprecated:该注解标注的内容,表示已过时
    @SuppressWarnings:压制警告
      一般传递参数all @SuppressWarnings("all")

  2.4 自定义注解

    格式:

1 元注解
2 public @interface 注解名称{
3     属性列表;
4 }

    本质:

      注解本质上就是一个接口,该接口默认继承Annotation接口

1 public interface MyAnno extends java.lang.annotation.Annotation {……}

    属性:接口中的抽象方法

      要求:

        1. 属性的返回值类型有下列取值

          基本数据类型
          String
          枚举
          注解
          以上类型的数组

        2. 定义了属性,在使用时需要给属性赋值

          1. 如果定义属性时,使用default关键字给属性默认初始化值,则使用注解时,可以不进行属性的赋值。

          2. 如果只有一个属性需要赋值,并且属性的名称是value,则value可以省略,直接定义值即可。

          3. 数组赋值时,值使用{}包裹。如果数组中只有一个值,则{}可以省略。

 

    元注解:用于描述注解的注解

      @Target:描述注解能够作用的位置

        ElementType取值:

          TYPE:可以作用于类上

          METHOD:可以作用于方法上
          FIELD:可以作用于成员变量上

      @Retention:描述注解被保留的阶段

        @Retention(RetentionPolicy.RUNTIME):当前被描述的注解,会保留到class字节码文件中,并被JVM读取到

      @Documented:描述注解是否被抽取到api文档中

      @Inherited:描述注解是否被子类继承

Calculator类

1 package com.zhiy.Calculator;
 2 
 3 public class Calculator {
 4     @test
 5     public void add() {
 6         System.out.println(1 + 0);
 7     }
 8 
 9     @test
10     public void sub() {
11         System.out.println(1 - 0);
12     }
13 
14     @test
15     public void mul() {
16         System.out.println(1 * 0);
17     }
18 
19     @test
20     public void div() {
21         System.out.println(1 / 0);
22     }
23 }

注解类

1 package com.zhiy.Calculator;
 2 
 3 import java.lang.annotation.ElementType;
 4 import java.lang.annotation.Retention;
 5 import java.lang.annotation.RetentionPolicy;
 6 import java.lang.annotation.Target;
 7 
 8 @Target({ElementType.METHOD})
 9 @Retention(RetentionPolicy.RUNTIME)
10 public @interface test {
11 }

CalculatorTest类

1 package com.zhiy.Calculator;
 2 
 3 import java.io.BufferedWriter;
 4 import java.io.File;
 5 import java.io.FileWriter;
 6 import java.io.IOException;
 7 import java.lang.reflect.InvocationTargetException;
 8 import java.lang.reflect.Method;
 9 
10 public class CalculatorTest {
11     public static void main(String[] args) throws IOException {
12         int num = 0;
13         File file = new File("Jfanshe\\bug.txt");
14         BufferedWriter bw = new BufferedWriter(new FileWriter(file));
15 
16         Calculator c = new Calculator();
17 
18         Class cls = c.getClass();
19 
20         Method[] methods = cls.getMethods();
21         for (Method method : methods){
22             if (method.isAnnotationPresent(test.class)){
23                 try {
24                     method.invoke(c);
25                 } catch (Exception e) {
26                     num++;
27                     bw.write(method.getName()+"方法出现异常");
28                     bw.newLine();
29                     bw.write("异常名叫:"+e.getCause().getClass().getSimpleName());
30                     bw.newLine();
31                     bw.write("异常原因:"+e.getCause().getMessage());
32                     bw.newLine();
33                     bw.write("--------------------");
34                 }
35             }
36         }
37         bw.newLine();
38         bw.write("本次测试共出现"+num+"个Bug");
39         bw.flush();
40         bw.close();
41     }
42 }