单元测试
单元测试就是针对最小的功能单元编写测试代码,用于检查各单元的正确性。
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 自动导入。

![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-gehqYsJQ-1679666731003)(F:\文档\Notes\Java\images\image-20230117190810216.png)]](https://i-blog.csdnimg.cn/blog_migrate/a256f5b40d4172980b9a195f8a60f185.png)
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-BXl4e2iT-1679666731003)(F:\文档\Notes\Java\images\image-20230117190905169.png)]](https://i-blog.csdnimg.cn/blog_migrate/662104166661f36c3c4bc877d3735dd4.png)
- 编写测试方法(可断言)
@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
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-be7F1xy5-1679666731004)(F:\文档\Notes\Java\images\image-20230117192405259.png)]](https://i-blog.csdnimg.cn/blog_migrate/dae058fa4dc897a3172eddf5290c60a0.png)
测试类中全部方法: 在类名处,右键选择 Run
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9xaIqLml-1679666731005)(F:\文档\Notes\Java\images\image-20230117192508795.png)]](https://i-blog.csdnimg.cn/blog_migrate/8a83cae0d93e238170220db9c3cc0091.png)
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-CawEvtSS-1679666731005)(F:\文档\Notes\Java\images\image-20230117192122096.png)]](https://i-blog.csdnimg.cn/blog_migrate/565c544e9ffa9d682e6aafc88ba1454a.png)
测试项目中所有方法: 在项目处右键,选择 Run
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-G1ofTnO1-1679666731006)(F:\文档\Notes\Java\images\image-20230117192810770.png)]](https://i-blog.csdnimg.cn/blog_migrate/a3398bb5bc2bd67ec3e8782f9baf0b16.png)
常用注解
| JUnit4 注解 | JUnit5 注解 | 说明 |
|---|---|---|
| @Test | @Test | 修饰测试方法 |
| @Before | @BeforeEach | 修饰实例方法,该方法在每个测试方法执行前都会执行一次 |
| @After | @AfterEach | 修饰实例方法,该方法在每个测试方法执行后都会执行一次 |
| @BeforClass | @BeforeAll | 修饰静态方法,该方法在所有测试方法执行前只执行一次 |
| @AfterClass | @AfterAll | 修饰静态方法,该方法在所有测试方法执行后只执行一次 |
单元测试是对程序中最小功能单元的测试,如Java中的方法。使用main方法测试存在局限,而JUnit是一个流行的Java单元测试框架,能解决这些问题,提供自动化测试和测试报告。JUnit支持对异常处理,但不能直接测试私有方法。测试步骤包括添加JUnit库,编写带有@Test注解的公共测试方法,并使用断言如Assert.assertEquals()来验证预期结果。

被折叠的 条评论
为什么被折叠?



