Junit测试

之前的JavaSE部分的笔记在有道云笔记上:MapList集合Set集合日期时间类泛型包装类Java Collections工具类(Comparable和Comparator)Iterator

在正式进入JavaWeb的学习之前,我们还要对JavaSE中的一些知识进行收尾。

  • Junit
  • 反射
  • 注解

测试分类:

  • 黑盒测试:不需要写代码,给输入值,看程序能否输出期望值
  • 白盒测试:需要写代码,关注程序具体执行流程

Junit使用

步骤:

  • 定义一个测试类
    • 建议:
    • 测试类名:被测试的类Test(如CalculatorTest)
    • 包名:xxx.xxx.xxx.test(如edu.qing.test)
  • 定义测试方法:可以独立运行
    • 建议:
    • 方法名:test测试的方法名,如testAdd()
    • 返回类型:void
    • 参数列表:空参
  • 给方法加@Test注解

例子:我们先创建一个Calculator.java类,代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
package CalculatorClass;

public class Calculator { // 定义一个计算器类
public int add(int a, int b){
return a+b;
}
public int sub(int a,int b){
return a-b;
}
public int mul(int a,int b){
return a*b;
}
}

然后创建test包,在其中创建CalculatorTest.java类,代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
package test;

import CalculatorClass.Calculator;
import org.junit.Assert;
import org.junit.Test;

public class CalculatorTest {
// 测试add方法
@Test
public void testAdd(){
// System.out.println("测试方法被执行");
// 1.创建Calculator对象
Calculator calculator = new Calculator();
// 2-1.调用add方法
int addResult = calculator.add(1, 3);
System.out.println(addResult);
// 2-2.调用sub方法
int subResult = calculator.sub(1, 3);
System.out.println(subResult);
// 2-3.调用mul方法
int mulResult = calculator.mul(1, 3);
System.out.println(mulResult);
// 3.断言Assert
Assert.assertEquals(4,addResult); // 4为预期效果
Assert.assertEquals(-2,subResult); // -2为预期效果
Assert.assertEquals(3,mulResult); // 3为预期效果
}
}

Junit中的@Before和@After注解

Junit4中的相关注解

例子:将上述CalculatorTest.java类改造如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
package test;

import CalculatorClass.Calculator;
import org.junit.After;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;

public class CalculatorTest {

// 初始化方法
@Before // 加上@Before注解,所有测试方法在执行之前都会先执行init()方法
public void init(){
System.out.println("执行初始化方法操作");
}

// 释放资源
@After // 加上@After注解,所有测试方法执行完毕后,都会执行close()方法
public void close(){
System.out.println("执行释放资源操作");
}

// 测试方法
@Test
public void testAdd(){
// System.out.println("测试方法被执行");
// 1.创建Calculator对象
Calculator calculator = new Calculator();
// 2-1.调用add方法
int addResult = calculator.add(1, 3);
System.out.println(addResult);
// 2-2.调用sub方法
int subResult = calculator.sub(1, 3);
System.out.println(subResult);
// 2-3.调用mul方法
int mulResult = calculator.mul(1, 3);
System.out.println(mulResult);
// 3.断言Assert
Assert.assertEquals(4,addResult); // 4为预期效果
Assert.assertEquals(-2,subResult); // -2为预期效果
Assert.assertEquals(3,mulResult); // 3为预期效果

}
}

执行效果如下:

方法的测试与否,取决于方法上是否加了@Test注解。这样可以让方法独立执行而不依赖于主方法,方便测试