单元测试
单元测试就是针对最小的功能单元编写测试代码,用于检查各单元的正确性。
Java程序最小的功能单元是方法,因此,对Java程序进行单元测试就是针对单个Java方法的测试。
使用 main 方法测试方法的问题
- 只有一个main方法,如果其中一个方法异常终止,其他方法测试也会受到影响。
- 无法得到测试的结果报告,需要程序员自己去观察。
- 无法实现自动化测试。
JUnit 框架
JUnit是一个开源的Java语言的单元测试框架,专门针对Java设计,使用最广泛。JUnit是单元测试的标准框架,任何Java开发者都应当学习并使用JUnit编写单元测试。
此外,几乎所有的IDE工具都集成了JUnit。
JUnit 的优点
- 一个方法的异常,不会影响其他方法的正常测试。
- 可以生成测试报告。
- 可以自动选择测试某些或全部方法。
不能测试私有方法
使用步骤
-
将JUnit jar包导入项目(IDEA中自带,不需要导入);
-
编写测试方法:必须是公共的、无参数的、无返回值的、非静态的方法;
-
在测试方法上使用
@Test
注解; -
断言:在测试方法中完成被测试方法的预期正确性测试。方法
Assert.assertEquals()
-
选择测试方法,选择 “JUnit运行”。
测试如下类:
public class Menu {
//...
public boolean login(String username, String password) {
//...
if ("zhangsan".equals(username) && "123".equals(password)) {
return true;
} else {
return false;
}
}
public void selectName(String name) {
//...
System.out.println(1 / 0); //模拟异常
}
}
操作演示
-
创建测试类,一般以
Test待测试类名
命名 -
创建测试方法,一般以
test方法名
命名,并加@Test
注释
public class TestMenu {
@Test
public void testLoge() {
}
@Test
public void testSelectName() {
}
}
使用IDEA自动导入(下载)JUnit的jar包
光标定位到 @Test
按下 alt + enter
选择 JUnit4
或 JUnit5
自动导入。
- 编写测试方法(可断言)
@Test
public void testLoge() {
Menu m = new Menu();
boolean result = m.login("zhangsan", "123");
//断言
Assert.assertEquals("与预期不符", true, result);
}
@Test
public void testSelectName() {
Menu m = new Menu();
m.selectName("zhangsan");
}
- 测试
测试单个方法: 在需要测试的方法的“范围内”,右键选择 Run
测试类中全部方法: 在类名处,右键选择 Run
测试项目中所有方法: 在项目处右键,选择 Run
常用注解
JUnit4 注解 | JUnit5 注解 | 说明 |
---|---|---|
@Test | @Test | 修饰测试方法 |
@Before | @BeforeEach | 修饰实例方法,该方法在每个测试方法执行前都会执行一次 |
@After | @AfterEach | 修饰实例方法,该方法在每个测试方法执行后都会执行一次 |
@BeforClass | @BeforeAll | 修饰静态方法,该方法在所有测试方法执行前只执行一次 |
@AfterClass | @AfterAll | 修饰静态方法,该方法在所有测试方法执行后只执行一次 |