龙空技术网

Javaweb知识 day01 单元测试&注解

御天说书 285

前言:

如今各位老铁们对“javaweb文件读取”都比较注重,你们都需要了解一些“javaweb文件读取”的相关资讯。那么小编在网络上收集了一些对于“javaweb文件读取””的相关知识,希望姐妹们能喜欢,大家一起来了解一下吧!

一、Junit测试

1.1 测试就是对所完成功能的校验,查看功能是否有缺陷有漏洞。在工作中,每次做完功能后都要进行测试,测试通过才可以结束该功能的编写。测试是开发中很重要的一部分。

1.2 测试分类:

1. 黑盒测试:不需要写代码,给输入值,看程序是否能够输出期望的值。

2. 白盒测试:需要写代码的。关注程序具体的执行流程。

1.3 Junit使用步骤:

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

命名建议:

测试类名:被测试的类名Test CalculatorTest

包名:xxx.xxx.xx.test cn.itcast.test

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

方法建议:

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

返回值:void

参数列表:空参

3. 给方法加@Test

4. 导入junit依赖环境

判定结果:

红色:失败

绿色:成功

一般我们会使用断言操作来处理结果

Assert.assertEquals(期望的结果,运算的结果);

1.3.1 注意事项:进行单元测试时,一定先要引入Junit包才可以使用。并且该注解必须在方法名上。

1.3.2 代码举例:

1.4 Junit中的@Before和@After:

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

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

每一个测试方法的调用顺序为: @Before –> @Test –> @After

二、反射

2.1 框架概念:半成品软件,可以在框架的基础上进行软件开发,简化编码

2.2 反射:在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。

好处:

1. 可以在程序运行过程中,操作这些对象。

2. 可以解耦,提高程序的可扩展性。

2.3 获取字节码Class对象的三种方式:

1. Class.forName("全类名"):将字节码文件加载进内存,返回Class对象

多用于配置文件,将类名定义在配置文件中。读取文件,加载类

2. 类名.class:通过类名的属性class获取

多用于参数的传递

3. 对象.getClass():getClass()方法在Object类中定义着。

多用于对象的获取字节码的方式

2.3.1 注意事项:同一个字节码文件(*.class)在一次程序运行过程中,只会被加载一次,不论通过哪一种方式获取的Class对象都是同一个。

2.4 Class对象常用方法:

2.4.1 获取成员变量:

Field[] getFields() :获取所有public修饰的成员变量

Field getField(String name) 获取指定名称的 public修饰的成员变量

Field[] getDeclaredFields() 获取所有的成员变量,不考虑修饰符

Field getDeclaredField(String name)

2.4.2. 获取构造方法:

Constructor<?>[] getConstructors()

Constructor<T> getConstructor(类<?>... parameterTypes)

Constructor<T> getDeclaredConstructor(类<?>... parameterTypes)

Constructor<?>[] getDeclaredConstructors()

2.4.3. 获取成员方法:

Method[] getMethods()

Method getMethod(String name, 类<?>... parameterTypes)

Method[] getDeclaredMethods()

Method getDeclaredMethod(String name, 类<?>... parameterTypes)

2.4.4. 获取全类名 String getName()

2.5 反射综合案例:

2.5.1 需求:写一个"框架",不能改变该类的任何代码的前提下,可以帮我们创建任意类的对象,并且执行其中任意方法

2.5.2 实现步骤:

1. 将需要创建的对象的全类名和需要执行的方法定义在配置文件中

2. 在程序中加载读取配置文件

3. 使用反射技术来加载类文件进内存

4. 创建对象

5. 执行方法

2.5.3 代码实现:

三、注解

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

3.2 作用分类:

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

②代码分析:通过代码里标识的注解对代码进行分析【使用反射】

③编译检查:通过代码里标识的注解让编译器能够实现基本的编译检查【Override】

3.3 JDK内置注解:

@Override:限定重写父类方法。对于子类中被@Override修饰的方法,如果存在对应的被重写的父类方法,则正确;如果不存在,则报错。@Override 只能作用于方法,不能作用于其他程序元素。

@Deprecated:该注解标注的内容,表示已过时

@SuppressWarnings:压制警告,一般传递参数all @SuppressWarnings("all")

3.4 自定义注解:

3.4.1 格式:

元注解

public @interface 注解名称{

属性列表;

}

3.4.2 注意事项:注解本质上就是一个接口,该接口默认继承Annotation接口

3.4.3 接口定义中的属性:接口中的抽象方法

要求:

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

基本数据类型

String

枚举

注解

以上类型的数组

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

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

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

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

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

3.4.4.1 元注解分类:

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

ElementType取值:

TYPE:可以作用于类上

METHOD:可以作用于方法上

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

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

@Retention(RetentionPolicy.SOURCE) 注解仅存在于源码中,在class字节码文件中不包含

@Retention(RetentionPolicy.CLASS) 默认的保留策略,注解会在class字节码文件中存在,但运行时无法获得,

@Retention(RetentionPolicy.RUNTIME) 注解会在class字节码文件中存在,在运行时可以通过反射获取到

首先要明确生命周期长度 SOURCE < CLASS < RUNTIME ,所以前者能作用的地方后者一定也能作用。一般如果需要在运行时去动态获取注解信息,那只能用RUNTIME注解;如果要在编译时进行一些预处理操作,比如生成一些辅助代码(如 ButterKnife),就用 CLASS注解;如果只是做一些检查性的操作,比如 @Override 和@SuppressWarnings,则可选用 SOURCE 注解。

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

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

标签: #javaweb文件读取