Lab 2:JUnit 测试与调试¶
- 原标题:Lab 2: JUnit Tests and Debugging
- 原页面:
https://sp21.datastructur.es/materials/lab/lab2/lab2
文档性质:本文件依据 CS 61B Spring 2021 官方页面,由 ChatGPT 独立阅读后制作中文学习版。
为保留技术准确性,类名、方法名、文件名、命令、报错文本和 API 名称保持英文。本文采用逐节翻译与重述,而不是网页的逐句镜像。
实验目标¶
学习两项贯穿整门课程的能力:
- 使用 IntelliJ Debugger 定位程序运行错误。
- 使用 JUnit 编写和运行单元测试。
开始前执行:
并以 lab2/pom.xml 为入口导入 Maven 项目。
1. Debugger 基础¶
Breakpoint¶
断点使程序在某一行执行前暂停。暂停后可以查看:
- 当前局部变量
- 对象字段
- 调用栈
- 当前执行位置
Step Into¶
进入当前行调用的方法内部。适合怀疑 bug 位于被调用方法时使用。
Step Over¶
执行当前行,但不进入方法内部。适合只关心调用结果时使用。
Step Out¶
继续执行直到当前方法返回。误进入不重要的方法时,可快速退出。
调试原则¶
不要凭感觉乱改代码。先确认:
- 实际值是什么?
- 预期值是什么?
- 两者第一次出现差异的位置在哪里?
- 这个差异是由哪一行或哪一次调用产生的?
2. JUnit 与单元测试¶
JUnit 测试通常通过 @Test 标记测试方法,并使用断言比较结果。例如:
测试方法应短小、明确,一次验证一个行为。JUnit 的一个测试方法中,断言失败后会停止执行该方法剩余部分,然后继续其他测试。
3. 在 IntelliJ 中运行测试¶
运行测试类后:
- 绿色表示通过。
- 红色表示失败。
- 点击失败位置可跳到对应测试代码。
- 先读 expected 与 actual,再进入 Debugger。
原实验中的 ArithmeticTest 会暴露错误实现,例如预期 5 + 6 = 11,实际代码却给出错误结果。任务是利用测试或调试器修复它。
4. IntList 应用练习¶
实验通过 IntList 练习:
- 迭代链表节点
- 使用嵌套辅助方法
- 为便于调试而重构代码
- 处理容易出错的特殊链表结构
重点不是只让测试变绿,而是学会把复杂逻辑拆成更容易观察和验证的小方法。
提交前检查¶
- 所有要求的 JUnit 测试通过。
- 没有为了通过测试而删除断言。
- 能解释 breakpoint、step into、step over、step out 的区别。
- 已提交 Lab 2 指定文件。
原始来源:CS61B Spring 2021 · 中文整理:everlasting · CC BY-NC-SA 4.0