目录
- 一、JUnit单元测试
- 1、JUnit介绍
- 2、测试案例
- 二、注解
- 1、JUnit中的注解
- 2、文档相关注解
- 3、JDK内置的3个注解
- 4、实现替代配置文件功能的注解
- 三、元注解
- 1、@Retention
- 2、@Target
- 3、@Documented
- 4、@Inherited
一、JUnit单元测试
1、JUnit介绍
JUnit是帮我们进行代码测试,平时我们要测试一段代码是否正确,就必须创建main()方法对其进行测试。JUnit大大简化了这个操作,可以使我们在不创建main()方法的情况下,对所要进行测试的方法进行测试,真正简单的做到“写一点,测一点”,方便我们发现错误,减少回归错误的纠错程度。
2、测试案例
(1)对如下代码进行测试:
public class Calculator {
public int Add(int a, int b){
return a+b;
}
public int Sub(int a, int b){
return a-b;
}
}
(2)新建一个测试类,添加 @Test注解 ,表明是JUnit测试
public class exampleTest {
@Test
public void testAdd(){
Calculator cal = new Calculator();
int result = cal.Add(10, 20);
System.out.println(result);
}
}
(3)添加断言
在(2)中,主要测试的是代码的完整性,是否能正常运行,而不能检测是否出现逻辑错误,例如误将Add方法中的“+”写成“-”,程序仍能正常运行,为了检测这类错误,引入断言。
断言:用于预测结果,判断我预测的结果是否和实际的结果一致
Assert.assertEquals(预测值, 实际结果);
public class exampleTest {
@Test
public void testAdd(){
Calculator cal = new Calculator();
int result = cal.Add(10, 20);
Assert.assertEquals(30, result);
}
}
若不一致则会出现如下情况:
(4)补充方法:@Before、@After
@Before:某一个方法中加入了@Before注解后,这个方法中的功能就会在测试方法执行前先执行。
一般会在@Before修饰的那个方法中加入:一些申请资源的代码;申请数据库资源;申请IO资源;申请网络资源等。
@After:某一个方法中加入了@After注解后,那这个方法中的功能就会在测试方法执行后再执行。
一般会在@After修饰的那个方法中加入:释放资源的代码;释放数据库资源;释放IO资源;释放网络资源等。
二、注解
注解(Annotation)也称元数据,是代码里的特殊标记,这些标记可以在编译,类加载,运行时被读取,并执行相应的处理,通过使用注解,程序员可以在不改变原有逻辑的情况下,在源文件中嵌入一些补充信息。
1、JUnit中的注解
JUint中的@Test,@After,@Before均是注解。
2、文档相关注解
代码中用/** … */注释中的信息。例如:@Author,@Time,@param,@exception等。
3、JDK内置的3个注解
(1)@Override:限定重写父类方法,该注解只能用于方法。
(2)@Deprecated:用于表示锁修饰的元素(类,方法,构造器,属性等)已过时(废弃)。通常是因为所修饰的结构危险或存在更好的选择。
(3)@SuppressWarnings:抑制编译器警告。
4、实现替代配置文件功能的注解
三、元注解
元注解是用于修饰其他注解的注解。 分为四种:@Retention、@Target、@Documented、@Inherited。
1、@Retention
用于修饰注解,用于指定修饰的那个注解的生命周期,@Retention包含一个RetentionPolicy枚举类型的成员变量,使用@Retention时必须为该value成员变量指定值。
(1)RetentionPolicy.SOURCE:在源文件中有效(即在源文件保留),编译器直接丢弃这种策略的注解,在.class文件中不会保留注解信息;
(2)RetentionPolicy.CLASS:在class文件中有效(即class保留),保留在.class文件中,但当运行Java程序时,它就不会继续加载,不会保留在内存中,JVM不会保留注解。如果注释没有加Retention元注解,就默认为这种状态;
(3)RetentionPolicy.RUNTIME:在运行时有效(即运行时保留),当运行Java程序时,JVM会保留注解,加载到内存中,那么程序可以通过反射获取该注解。
2、@Target
用于指定被修饰的注解能用于修饰哪些程序元素(类、属性、方法等。)
3、@Documented
用于指定被该元注解修饰的注解类将被javadoc工具提取成文档。默认情况下,javadoc是不包括注解的,但加上之后就会带注解。
4、@Inherited
被其修饰的注解将具有继承性,如果某个类使用了被@Inherited修饰的Annotation,则其子类将自动具有该注解。