8.1 Junit单元测试 Junit是Java语言编写的第三方单元测试框架(工具类)。 要点:Junit的测试类需要导入测试jar包才可以。 简单理解为可以用于取代java的main方法。Junit属于第三方工具,一般情况下需要导入jar包。不过,多数Java开发环境已经集成了JUnit作为单元测试工具,类库 ==> 类 junit.jar
junit单元测试(给代码做正确性测试,单元测试其实就是对类中的方法进行测试,测试方法的正确性与预期是否一样)1000个方法、业务很复杂。写单元测试(自动化测试):事先写好测试代码。单元测试不是一定要写的,一般大型公司要求你们写。 单元:在Java中,一个类就是一个单元
单元测试概念 单元测试:单元测试是开发者编写的一小段代码,用于检验某个类或某个方法的功能或某个业务逻辑是否正确。单元测试一旦写好了这些测试代码,就可以一直使用,可以实现一定程度上的自动化测试。 Junit单元测试框架的作用 用来对类中的方法功能进行有目的的测试,以保证程序的正确性和稳定性,能够让方法独立运行起来。 Junit单元测试框架的使用步骤: 编写业务类,在业务类中编写业务方法。比如增删改查的方法 编写测试类,在测试类中编写测试方法,在测试方法中编写测试代码来测试。 测试类的命名规范: 以Test开头,以业务类类名结尾,使用驼峰命名法 每一个单词首字母大写,称为大驼峰命名法,比如类名,接口名… 从第二单词开始首字母大写,称为小驼峰命名法,比如方法命名 比如业务类类名:ProductDao,那么测试类类名就应该叫:TestProductDao 测试方法的命名规则:以test开头,以业务方法名结尾 比如业务方法名为:save,那么测试方法名就应该叫:testSave
测试方法注意事项 必须是public修饰的,没有返回值,没有参数。必须使注解@Test修饰
如何运行测试方法 选中方法名 --> 右键 --> Run ‘测试方法名’ 运行选中的测试方法 选中测试类类名 --> 右键 --> Run ‘测试类类名’ 运行测试类中所有测试方法 选中模块名 --> 右键 --> Run ‘All Tests’ 运行模块中的所有测试类的所有测试方法
如何查看测试结果 :绿色:表示测试通过。 红色:表示测试失败,有问题 Junit常用注解(Junit4.xxxx版本) @Before:用来修饰方法,该方法会在每一个测试方法执行之前执行一次。 @After:用来修饰方法,该方法会在每一个测试方法执行之后执行一次。 @BeforeClass:用来静态修饰方法,该方法会在所有测试方法之前执行一次。 @AfterClass:用来静态修饰方法,该方法会在所有测试方法之后执行一次。
Junit常用注解(Junit5.xxxx版本) @BeforeEach:用来修饰方法,该方法会在每一个测试方法执行之前执行一次。 @AfterEach:用来修饰方法,该方法会在每一个测试方法执行之后执行一次。 @BeforeAll:用来静态修饰方法,该方法会在所有测试方法之前执行一次。 @AfterAll:用来静态修饰方法,该方法会在所有测试方法之后执行一次。
8.2注解的学习 注解概念: 注解是JDK1.5的新特性。注解相当一种标记 ,是类的组成部分,可以给类携带一些额外的信息。标记(注解)可以加在包,类,字段,方法,方法参数以及局部变量上。注解是给编译器或JVM看的,编译器或JVM可以根据注解来完成对应的功能。 注解(Annotation)相当于一种标记: 在程序中加入注解就等于为程序打上某种标记,以后,javac编译器、开发工具和其他程序可以通过反射来了解你的类及各种元素上有无何种 标记,看你的程序有什么标记,就去干相应的事,标记可以加在包、类,属性、方法,方法的参数以及局部变量上。
注解的作用 : 就是给程序带入参数,1.生成帮助文档:@author和@version 2.编译检查:@Override 3.框架的配置(框架=代码+配置) 以下常见注解: @author:用来标识作者姓名 ,eclipse开发工具默认的是系统用户名。 @version:用于标识对象的版本号 :适用范围:文件、类、方法。 使用@author和@version注解就是告诉Javadoc工具在生成帮助文档时把作者姓名和版本号也标 @Override:用来修饰方法声明,编译检查。 重写注解,用来告诉编译器该方法是重写父类中的方法,如果父类不存在该方法,则编译失败。
注解属性的作用: 可以让用户在使用注解时传递参数,让注解的功能更加强大。 属性的格式: 格式1:数据类型 属性名(); 格式2:数据类型 属性名() default 默认值; 属性定义示例: String name();// 姓名 int age() default 18; // 年龄 String[] hobby();// 爱好
属性适用的数据类型: 八种基本数据类型(int, float, boolean, byte, double, char, long, short) String类型,Class类型,枚举类型,注解类型,以上类型的数组形式 自定义注解格式:
例子 :使用自定义注解,定义一个注解:Book,代码实现如下: 包含属性:String value() 书名 包含属性:double price() 价格,默认值为 100 包含属性:String[] authors() 多位作者
注解之元注解 元注解概述 ; Java官方提供的注解, 用来定义注解的注解,任何官方提供的非元注解的定义都使用到了元注解。 常用的元注解 :@Target ,@Retention @Target作用:用来标识注解使用的位置,如果没有用该注解标识,则自定义注解可以使用在任意位置。可使用的值定义在ElementType枚举类中,常用值用法如下: TYPE,类,接口 FIELD, 成员变量 METHOD, 成员方法 PARAMETER, 方法参数 CONSTRUCTOR, 构造方法 LOCAL_VARIABLE, 局部变量
@Retention 作用:用来标识注解的生命周期(有效范围) 可使用的值定义在RetentionPolicy枚举类中,常用值如下 SOURCE:注解只作用在源码阶段,生成的字节码文件中不存在 CLASS:注解作用在源码阶段,字节码文件阶段,运行阶段不存在,默认值 RUNTIME:注解作用在源码阶段,字节码文件阶段,运行阶段
注解解析 什么是注解解析 :使用Java技术获得注解上数据的过程则称为注解解析。 与注解解析相关的接口 Annotation: 注解类,该类是所有注解的父类。 AnnotatedElement:该接口定义了与注解解析相关的方法 。 T getAnnotation(Class annotationClass)根据注解类型获得对应注解对象。
Annotation[] getAnnotations()获得当前对象上使用的所有注解,返回注解数组,包含父类继承的。
Annotation[] getDeclaredAnnotations()获得当前对象上使用的所有注解,返回注解数组,只包含本类的。
Boolean isAnnotationPresent(Class annotationClass) 判断当前对象是否使用了指定的注解,如果使用了则返回true,否则false。
获取注解数据的原理 : 注解作用在哪个成员上就会得该成员对应的对象来获得注解 比如注解作用成员方法,则要获得该成员方法对应的Method对象 比如注解作用在类上,则要该类的Class对象 比如注解作用在成员变量上,则要获得该成员变量对应的Field对象。 Field,Method,Constructor,Class等类都是实现了AnnotatedElement接口