test-driven-spring-boot:用 TDD 写出来的 Spring Boot 示例

这个项目在 GitHub 上拿到 112 Star 了。

xpinjection 开源的 test-driven-spring-boot 是一个 Spring Boot 云原生应用示例,全程按 TDD 风格编写,用来演示如何在 Spring Boot 项目里落测试驱动开发。仓库不大,但拿到 CI 上的 Maven 构建徽章一直在跑。

正文顶部截图

1、 项目解决什么问题

写 Spring Boot 的人多,能把 TDD 真正用起来的少。多数项目靠补测试凑覆盖率,先写实现再补用例,测出的东西更像是事后背书。

这个仓库把顺序倒过来。它给人演示一套从需求到用例再到实现的写法:测试先跑红,生产代码补到能过,再回头重构。整个工程结构按这套节奏来。

2、 本地怎么跑

入口是 LocalLibraryApplication 这个类。作者的说明很直接:跑它就够了。需要的依赖通过 Docker 容器自动拉起,应用连上就能工作。

不用手动拉数据库、不用改配置文件,本地环境一行命令的事。

README区域截图

3、 Actuator 端点怎么开

Spring Boot Actuator 的管理端点默认不暴露。要激活,需要打开 admin profile,并把账号密码通过系统属性传进去:

-Dspring.security.user.name=admin
-Dspring.security.user.password=xpinjection
-Dspring.profiles.active=dev,admin

没有把账号写死在代码里,而是依赖外部配置传入。这种做法比 property 文件里塞默认值干净些,部署到不同环境直接换系统属性即可。

4、 Consumer-Driven Contracts 怎么接

项目用 Pact 描述并管理 REST API 契约。

仓库里的 /pact/docker-compose.yaml 能起一个 Pact Broker 加 PostgreSQL 依赖。这个 broker 实例不挂卷,数据重启就清,适合本地验证用。

测试阶段要不要跑 Pact,由 pactbroker.enabled 系统属性控制。验证结果发不发布到 broker,看 pact.verifier.publishResults

pact.provider.versionpact.provider.branch 用来传当前应用版本号和 git 分支,broker 里靠它们跟踪契约的演变过程。

5、 Testcontainers 不想跑怎么办

有些场景本地没 Docker,或者只想快速过一遍构建。作者留了一个开关,把 testcontainers.enabled 设为 false 就能跳过依赖 Testcontainers 的测试:

./mvnw verify -Dtestcontainers.enabled=false

6、 适合什么人看

  • 想在 Spring Boot 项目里真正落 TDD,但不知道怎么破题的开发者
  • 在搭契约测试流程、需要一份能跑的 Pact 集成样例的人
  • 给团队做培训、要找一个干净小工程当样例讲清楚的人

在搭契约测试流程、需要一份能跑的 Pact 集成样例的人

  • 给团队做培训、要找一个干净小工程当样例讲清楚的人

更多推荐