JUnit简单入门
程序员文章站
2024-03-15 19:25:06
...
JUnit
JUnit
是一个开源的Java
语言的单元测试框架,专门针对Java
设计,使用最广泛。
JUnit 注解
import org.junit.jupiter.api.* |
Import statement for using the following annotations. |
---|---|
@Test |
将方法标识为测试方法 |
@BeforeEach |
在每次测试之前执行。通常用于准备测试环境(例如,读取输入数据,初始化类) |
@AfterEach |
在每个测试之后执行。通常用于清除测试环境(例如,删除临时数据,恢复默认值)。还可以完成清理内存的操作。 |
@BeforeAll |
在所有测试开始之前执行一次。它用于执行时间密集型活动,例如,连接到数据库。使用这个注解标记的方法需要被定义为静态的。 |
@AfterAll |
在所有测试完成后执行一次。 它用于执行清理活动,例如,断开与数据库的连接。 需要将带有此注解的方法定义为静态的。 |
以上就是最常用的五种注解了。
JUnit 断言
使用JUnit
进行单元测试,我们可以使用断言(Assertion
)来测试期望结果,可以方便地组织和运行测试,并方便地查看测试结果。
Junit
所有的断言都包含在 Assert
类中。
这个类提供了很多有用的断言方法来编写测试用例。只有失败的断言才会被记录。Assert
类中的一些有用的方法列式如下:
方法名 | 作用 |
---|---|
void assertEquals(boolean expected, boolean actual) |
检查两个变量或者等式是否平衡 |
void assertTrue(boolean expected, boolean actual) |
检查条件是否为真 |
void assertFalse(boolean condition |
检查条件是否为假 |
void assertNotNull(Object object) |
检查对象是否不为空 |
void assertNull(Object object) |
检查对象是否为空 |
void assertSame(boolean condition) |
检查两个相关对象是否指向同一个对象 |
void assertNotSame(boolean condition) |
检查两个相关对象是否不指向同一个对象 |
void assertArrayEquals(expectedArray, resultArray) |
检查两个数组是否相等 |
通常我用的最多的还是assertEquals( )
方法。
Junit 测试用例
下面就做一个最简单的示例,简单展示用法:
package cn.hust.enhance;
public class Calculator {
int age;
/**
* 加法
* @param a
* @param b
* @return
*/
public int add(int a,int b){ return a+b; }
/**
* 减法
* @param a
* @param b
* @return
*/
public int sub(int a,int b){
return a-b;
}
}
这是一个Calculator
类,里面有add( )
和sub( )
两个方法,分别代表加和减操作。
为了测试这两个方法,我们创建一个CalculatorTest
类。
package cn.hust.test;
import cn.hust.enhance.Calculator;
import org.junit.jupiter.api.*;
import static org.junit.jupiter.api.Assertions.assertEquals;
public class CalculatorTest {
/**
* 测试add方法
*/
@Test
public void testAdd() {
Calculator calculator=new Calculator();
int result = calculator.add(1, 2);
//断言的第一个参数表示预期的值,第二个参数表示运算的结果
//这里的的计算结果与预期结果是一致的,所以测试通过
assertEquals(3, result);
System.out.println("testAdd()");
}
/**
* 测试sub方法
*/
@Test
public void testSub() {
Calculator calculator=new Calculator();
int result = calculator.sub(1, 2);
//断言的第一个参数表示预期的值,第二个参数表示运算的结果
//这里的的计算结果与预期结果是不一致的,所以测试没通过
assertEquals(1, result);
System.out.println("testSub()");
}
}
测试结果如下:
左侧结果显示testSub()
方法没有通过,从右边的结果可以看到,testSub()
预期的结果是 1,而实际的结果为-1。而且从输出的内容来看,当断言检查的结果不通过时,后面的语句并不会被执行。
CalculatorTest
类加上@BeforeEach
注解和@AfterEach
注解:
新增代码如下:
/**
* 初始化方法
* 在所有方法执行前执行这个方法
*/
@BeforeEach
public void init() {
System.out.println("开始执行");
}
/**
*每个测试方法运行后,运行close()方法
*/
@AfterEach
public void close() {
System.out.println("结束执行");
}
结果如下:
可以看到,先输出了开始执行,再输出testAdd()
,最后输出结束执行。这样当我们需要处理一些公共的事务时,就可以采用@BeforeEach
注解和@AfterEach
注解。
小结
- 定义一个测试用例,测试类名为被测试类名+
Test
。 - 定义测试方法:可以独立运行
- 方法名:
test
+测试的方法名 - 返回值:
void
- 参数列表:空参
- 方法名:
- 给方法加
@Test
注解,用来识别为测试方法 - 存在预处理和收尾的处理时,可以使用
@BeforeEach
和@AfterEach
注解,当然也可以用@BeforeAll
和@AfterAll
注解 - 关于
JUnit
还有很多高级的测试内容,比如参数测试、套件测试等,但是目前我用的就只是这些简单的,所以以后有机会再总结一下
参考文章
上一篇: 判断一个数是否为素数
下一篇: DWR 入門與應用(一)