本 Demo 用于演示 SpringBoot 框架的使用。
本 Demo 的测试部分基于测试金字塔理论,目的是探求 SpringBoot 框架下对测试金字塔思想的表达,以及一些优秀工具的演示:
- JDK 8
使用 Docker Compose
启动已经过配置的 MySQL
容器(默认端口号为 3306):
docker-compose up -d
运行以下 Gradle
任务启动程序:
./gradlew bootrun
然后用浏览器访问:
使用以下命令运行 API 的端到端测试:
./gradlew test --tests name.huhao.springbootdemo.e2e.*
使用以下命令运行 Controller 的集成测试:
./gradlew test --tests name.huhao.springbootdemo.integration.*
使用以下命令运行 Controller 的单元测试:
./gradlew test --tests name.huhao.springbootdemo.unit.*
本 Demo 中的端到端测试使用了 flyway-test-extensions 进行每个测试用例运行前的数据库重置。
- 在 Intellij IDEA 中运行全部测试。
- 对比 UserController 的全部测试,会发运行速度有符合测试金字塔的明显差异。
- 先写一个新的 Controller 的单元测试,Mock 掉 Repository,会发现驱动出不依赖 Spring 框架的 Controller 代码。
- 再写一个针对上述 Controller 的集成测试,Mock 掉 Repository,会驱动引入 Spring 针对 Controller 的必要注解。
- 再写一个针对上述 Controller 所依赖的 Repository 的集成测试,会驱动 Repository 继承 JpaRepository。
- 再写一个针对上述 Controller 的端到端测试,弥补了之前两种集成测试的测试间隙,实现最终完成。