Junit单元测试

Junit单元测试、反射、注解

分类

  • 黑盒测试,不用写代码,给输入看是否能输出指定结果。
  • 白盒测试,需要写代码,关注程序具体的执行流程。

Junit使用

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

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

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

test方法名()

返回值 void

参数列表 空参数

  1. 给方法加@Test注解

  2. 添加Junit依赖

判定结果

使用断言来判断真实结果和期望值是否相等。

其他

@Before 在测试方法执行前进行,用于资源申请

@After 在测试方法执行之后进行,用于资源释放

public class TestCalculator {

    /**
     *
     */
    @Before
    public void init(){
        System.out.println("申请资源");
    }
    /**
     * 测试add方法
     *
     */
    @Test
    public  void testAdd(){
        Calculator calculator = new Calculator();
        int result = calculator.add(10,29);
//        System.out.println(result);
        Assert.assertEquals(30,result);

    }

    @After
    public void close(){
        System.out.println("关闭资源");
    }
}

反射

将类的各个组成部分封装为对象。

好处

  • 可以在程序运行过程中操作这些对象
  • 可以解耦,提高程序的可扩展性

获取class的方式

  • Class.forName(“包+类名”)

    多用于配置文件

  • 类名.class

    多用于参数传递

  • 对象.getClass()

同一个字节码文件.class 在程序运行过程中只会加载一次,三种方式获取的class对象都是同一个。

注解

  • 编写文档

    通过注解生成文档

    命令行 使用javadoc 文件.java 抽取处注解的文字生成html的参考文档。

  • 代码分析

    使用反射

  • 编译检查

    如override

预定义

@Override

@Deprecated 表示已过时

@SuppressWarnings(“all”) 压制左右警告

@SuppressWarnings("all")
public class AnnotationTest {

自定义注解

格式

public @interface MyAnnotation {
    int show();
//    // 赋值默认值,不用再使用时赋值
    String name() default "Jhon";
}

使用

@MyAnnotation(show = 10)
public void eat(String name) {
    System.out.println(name + "正在吃饭");
    return;
}

本质

  • 继承了Annotation的接口

属性

  • 接口中定义的成员方法
  • 定义的成员方法的返回值只能以下取值
    • 基本数据类型
    • String
    • 枚举
    • 注解
    • 以上类型的数组
  • 属性名为value时,可以直接写值,不用写value=xx

元注解

  • 描述注解的注解
  1. @Target:描述注解作用的位置

    ElementType.TYPE, // 作用于类
    ElementType.FIELD, // 作用于变量
    ElementType.METHOD // 作用于方法
    
  2. @Retention: 描述注解被保留的阶段,一般用RUNTIME

    @Retention(RetentionPolicy.RUNTIME)
    // 注解会被保留到.class 文件中,被JVM读取到
    
  3. @Documented : 描述注解是否被抽取到api文档中

    加了这个注解的,注解名称会在API文档中显示

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

在程序中解析注解

注解一般在程序中替代配置文件

  1. 获取注解定义位置的对象
  2. 获取指定注解
  3. 调用注解中的抽象方法获取值
Class<ReflectTest> reflectTestClass = ReflectTest.class;
// 获取指定类型注解
// 在内存中生成了一个该注解接口的子类实现对象
Properties annotation = reflectTestClass.getAnnotation(Properties.class);
// 调用注解中的抽象方法
String s = annotation.className();
System.out.println(s);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值