Java 测试驱动开发(TDD):让你的代码更健壮
写代码时,Bug 总是阴魂不散,尤其是复杂业务逻辑,稍不注意就容易翻车。
如何从一开始就减少错误?测试驱动开发(TDD) 可能是个不错的选择。
一、TDD 是什么鬼?
TDD,Test-Driven Development,字面意思是“测试驱动开发”,
它的核心思想是——“先写测试,再写代码”。听起来像是倒过来写代码,但这确实是它的独特魅力。
TDD 的三个核心步骤:
- 红灯:写一个无法通过的单元测试(因为代码还没实现)。
- 绿灯:实现代码,确保测试通过。
- 重构:优化代码结构,保持测试通过。
用个简单的比喻:你在建房子前先画好图纸(测试),再盖房子(实现代码),最后装修(重构代码)。
整个过程“井然有序”,让你更好地把握需求。
二、为什么用 TDD?值不值?
先讲优点,再说槽点,咱公平评价一下。
1. TDD 的优点
- 需求明确:测试用例就像“验收标准”,明确告诉你系统该怎么工作。
- 减少 Bug:先写测试,等于提前踩坑,能减少上线后出现的低级错误。
- 代码设计更优雅:为了通过测试,你会自然而然写出“可测试的代码”,减少耦合,增强灵活性。
- 便于重构:重构时,不怕改崩,因为测试会时刻保护你。
2. TDD 的槽点
- 初期慢:刚开始写测试,效率确实比直接撸代码慢,但长期来看节省了后期调试和修复时间。
- 难度大:对于复杂逻辑或第三方依赖,写测试会比较麻烦。
- 不是万能药:UI 测试、性能测试等场景,TDD 并不是首选。
三、TDD 实战:用 Java 实现一个简单计算器
下面通过一个简单的例子,带你感受 TDD 的魅力。
我们要实现一个支持加减运算的计算器,需求如下:
- 提供
add(a, b)
方法,实现两个整数的相加。 - 提供
subtract(a, b)
方法,实现两个整数的相减。
第一步:写测试(红灯)
我们先创建一个测试类,使用 JUnit 测试框架。
import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.