1、 Junit

1.1什么是Junit

Junit是Java语言编写的第三方单元测试框架(工具)。

1.2单元测试

在Java中,一个类就是一个单元。

单元测试:开发中编写的一小段代码,用来检测类中的某个方法的功能或业务逻辑是否正确。

1.3 Junit的作用

可以让方法独立运行。

用来检测类中的某个方法的功能或业务逻辑是否正确,最大限度保证程序的稳定性和正确性。

1.4 Junit的使用步骤

编写业务类,在业务类中编写业务方法。

编写测试类,在测试类中编写测试方法。

测试类命名规则:以Test开头,后面跟业务类类名,使用驼峰命名法。

比如:业务类类名ProductDao,测试类类名则为:TestProduct

1.5测试方法特点

命名规则:以test开头,以业务名结尾,比如:业务方法名为save,测试方法名为testSave。

声明要求:必须是public修饰的,必须没有返回值,必须没有参数,必须使用@Test注解修饰。

1.6 如何运行测试方法

选择方法名-à右键-àRun“方法名;运行选中的测试方法。

选择类名-à右键-àRun“类名;运行类中所有的测试方法

选择模块名-à右键-àRun“类名;运行模块中所有的测试方法

1.7 查看测试结果

绿色:测试通过

红色:测试失败,有问题

断言:预先判断某个条件一定成立,如果条件不成立,则直接崩溃。

Assert.assertEquals(message, except, actual)

Message:错误提示信息字符串

Excepted:期望值

Actual:实际值

1.8 常用注解”

@Before:修饰方法,会在每一个测试方法执行之前执行一次

@After:修饰方法,会在每一个测试方法执行之后执行一次

@BeforeClass    :修饰静态方法,该方法会在所有测试方法执行之前执行一次

@AfterClass:修饰静态方法,该方法会在所有测试方法执行之后执行一次

2、 反射

2.1 反射的概念

反射是一种机制,利用该机制可以在程序的运行过程中对类进行解剖,然后操作类中的所有成员。

2.2 反射的使用场景

开发IDE(集成开发环境,比如Eclipse, IDEA…)

各种框架的设计,比如:Hibernate, Spring, Struct, Java三大框架

2.2.1反射机制使用前提

必须要获得类的字节码文件对象,即是Class对象

2.3 获得Class对象的三种方式

方式1:通过对象名调用getClass方法获得

  方式2: 通过类名.class获得

  方式3:通过Class类的静态方法获得:static Class forName(“类全名字符串”)

  以上三种方式获得的Class对象都是相同。

2.4 获取Class对象的信息

(1)String getSimpleName()     获得简单类名,只是类名,没有包

(2)String getName                 获得完整类名,包含包名+类名

(3)T newInstance()                 创建此Class对象所表示的类的一个新实例,类必须有public修饰的无参数的构造方法

2.5 获取Class对象的Constructor信息

2.5.1 Constructor类概述

每一个类中的构造方法都是一个Constructor类的对象。

获得构造方法对象的目的就是为了利用构造方法对象创建对象。

 

2.5.2 Class类中与Constructor相关的方法

(1). Constructor getConstructor(Class... parameterTypes)

根据参数类型获取构造方法对象,只能获得public修饰的构造方法。

(2) Constructor getDeclaredConstructor(Class... parameterTypes)

根据参数类型获取构造方法对象,包括private修饰的构造方法。

(3)Constructor[] getConstructors()

获取所有的public修饰的构造方法

(4)Constructor[] getDeclaredConstructors()

获取所有构造方法,包括privat修饰的

2.5.3 Constructor类中成员方法对象

(1) T newInstance(Object... initargs)             根据指定参数创建对象。

(2) void setAccessible(true)           暴力反射,设置为可以直接访问私有类型的构造方法。

2.6 获取Class对象的Constructor信息

每一个类中的成员方法都是一个Method类的对象。

获得Method方法对象的目的就是为了要调用该方法。

 

2.6.1 Class类中与Method相关方法

(1)Method getMethod("方法名", 方法的参数类型... 类型)

根据方法名和参数类型获得一个方法对象,只能是获取public修饰的

(2)Method getDeclaredMethod("方法名", 方法的参数类型... 类型)

根据方法名和参数类型获得一个方法对象,包括private修饰的

(3)Method[] getMethods()

获取所有的public修饰的成员方法,包括父类中。

(4)Method[] getDeclaredMethods()

获取当前类中所有的方法,包含私有的,不包括父类中。

 

2.6.2 Method 类中常见方法

(1)Object invoke(Object obj, Object …args)

根据参数args调用对象obj的该成员方法

如果obj=null,则表示该方法是静态方法

(2)void setAccesible(Boolean flag)

暴力反射,私有修饰的成员方法也可以设置为可以直接调用

2.7 获取Class对象的Field信息

每一个类中的成员变量都是一个Field类的对象。

获得Field方法对象的目的就是为了要调用该成员变量。

 

2.7.1 Class类中与Field相关的方法

(1)Field getDeclaredField(String name)

根据属性名获得属性对象,包括private修饰的

(2)Field getField(String name)

根据属性名获得属性对象,只能获取public修饰的

(3 Field[] getFields()

获取所有的public修饰的属性对象,返回数组。

(4)Field[] getDeclaredFields()

获取所有的属性对象,包括private修饰的,返回数组。

2.7.3 类中常用方法

void  set(Object obj, Object value)

Object get(Object obj)

void setAccessible(true);      暴力反射

Class getType();                   获取属性的类型,返回Class对象。

 

3. 注解

注解相当一种标记,是类的组成部分,可以给类携带一些额外的信息。

注解可以加在包,类,字段,方法,方法参数以及局部变量上。

3.1 自定义注解

注解定义格式:@interface 注解名{}

 

3.2 注解的属性

3.2.1属性的定义格式

格式1:数据类型 属性名();

格式2:数据类型 属性名() default 默认值;

属性的注意事项:如果属性有默认值,则在使用注解时可以不用给属性赋值,否则在使用注解时必须给属性赋值。

3.2.2属性可用的数据类型

八种数据类型

String,Class,枚举类,注解类型

以上数据类型的数组形式

3.2.3特殊属性:value

如果注解只有一个属性且属性名为value时, 在使用注解时可以直接给value赋值,而不需要给出属性名。

如果注解中除了value属性之外还有其他属性,且其他属性至少有一个没有默认值,则使用注解时value属性名不能省略。

3.3元注解

3.3.1概述

Java官方提供的注解。专门用来定义注解的注解。

任何官方的注解在定义时都使用了元注解

3.3.2常用的元注解

@Target

@Retention

(1)@Target注解

用来表示注解使用的位置

常用值如下:ElementType 。TYPE, FIELD, METHOD, PARAMETER, CONSTRUCTOR, LOCAL_VARIABLE

(2)@Retention

用来标识注解的生命周期

常用值如下:SOURCE, 只作用在源码阶段,生成class文件不存在

CLASS, 作用在源码阶段,字节码阶段,不作用在运行时阶段

RUNTIME       作用在所有阶段

3.4注解解析

通过Java技术获取注解信息的过程称为注解解析

3.4.1注解解析相关的类和接口

Annotation : 该类是所有注解的父类

AnnotatedElement:该接口定义了与注解解析相关的方法,常用的方法以下四个:

(1)Boolean isAnnotationPresent(Class annotationClass);    判断当前对象是否有指定的注解,有则返回true,否则返回false

(2)T getAnnotation(Class<T> annotationClass);  获得当前对象上指定的注解对象

(3)Annotation[] getAnnotations();                获得当前对象及其从父类上继承的所有的注解对象

(4)Annotation[] getDeclaredAnnotation();    获得当前对象上所有的注解对象,不包括父类的

3.4.2获取注解数据的原理

注解作用在成员上,就通过反射获得该成员的对象来得到它的注解。

比如:注解作用在成员方法,就通过方法(Method)对象得到它的注解。

注解作用在类上,就通过Class对象得到它的注解。

最新文章

  1. HTML5学习笔记一 简单学习HTML5
  2. sql server 日期
  3. ansible定时任务
  4. 配置 ASP.NET Linux( CentOS 6.5 ) 运行环境 MONO + Jexus
  5. ios上 更改 状态栏(UIStatusBar)
  6. php集成开发环境的安装以及Zend Studio开发工具的安装
  7. mysql隔离机制
  8. WIN7 Wireshark: There are no interfaces on which a capture can be done
  9. os模块实现遍历文件
  10. ios 类似的效果淘宝商品详细页面
  11. 《Python数据分析常用手册》一、NumPy和Pandas篇
  12. SDN第二次作业
  13. Linux允许、禁止ping包
  14. Linux下tomcat运行时jvm内存分配
  15. 南大算法设计与分析课程复习笔记(3)L3 - Recursion
  16. Linux中.rar文件解压
  17. ARKit从入门到精通(10)-ARKit让飞机绕着你飞起来
  18. Linux下MySQL开放root的远程访问权限
  19. fedora常见问题和解决方案
  20. SQLSERVER 子查询中使用ORDER BY

热门文章

  1. vue 同一个组件的跳转, 返回时保留原来的下拉位置
  2. 二叉堆(小到大)-数据结构-JavaScript版
  3. python-基础学习篇(一)
  4. docker一键安装
  5. 「BZOJ1924」「SDOI2010」 所驼门王的宝藏 tarjan + dp(DAG 最长路)
  6. JMS介绍
  7. oracle 基础知识(二)-表空间
  8. MHA 高可用架构部署
  9. linux下统计文本行数的各种方法(二)
  10. FZU 2122——又见LKity——————【字符串匹配、暴力】