接口测试¶
后端怎么验证自己写的对?两种:手动用 Postman 调,或写自动化测试。
手动测试:Postman / Apifox¶
- 先
POST /auth/register注册,再POST /auth/login拿 token; - Postman 里给后续请求统一配 Header
Authorization: Bearer <token>; POST /tasks、GET /tasks逐个调,看返回对不对。
适合开发期快速验证。缺点:每次改代码都要手动重调一遍。
自动化测试:JUnit¶
写代码测代码,一次编写、随时运行。Spring Boot 自带 JUnit 5(spring-boot-starter-test)。
最实用的是纯逻辑单元测试——不启动 Spring、不连数据库,秒级跑完:
package com.javaglm.task;
import com.javaglm.task.common.Result;
import org.junit.jupiter.api.Test;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import static org.junit.jupiter.api.Assertions.assertFalse;
import static org.junit.jupiter.api.Assertions.assertTrue;
import static org.junit.jupiter.api.Assertions.assertEquals;
/**
* 单元测试示例(第 31 章)。
* 用 JUnit 5(spring-boot-starter-test 自带)。
* 这种"纯逻辑测试"不启动 Spring 上下文、不连数据库,秒级跑完,是日常写得最多的测试。
*/
class TaskManagerApplicationTests {
@Test
void successResultShouldCarryData() {
Result<String> r = Result.success("hi");
assertEquals(200, r.getCode());
assertEquals("success", r.getMessage());
assertEquals("hi", r.getData());
}
@Test
void bcryptPasswordShouldMatch() {
BCryptPasswordEncoder encoder = new BCryptPasswordEncoder();
String hash = encoder.encode("123456");
assertTrue(encoder.matches("123456", hash)); // 正确密码:匹配
assertFalse(encoder.matches("wrong", hash)); // 错误密码:不匹配
}
}
要点:
@Test标记一个测试方法;assertEquals(期望值, 实际值)断言相等,不等就失败;assertTrue/assertFalse断言真假;- 这个测试测了
Result封装和BCryptPasswordEncoder,都是纯逻辑,跑得飞快。
运行测试¶
三种测试层次¶
| 类型 | 测什么 | 速度 | 本书 |
|---|---|---|---|
| 单元测试 | 纯逻辑(如上面的) | 极快 | ✅ 重点 |
切片测试(@WebMvcTest) |
只测 Web 层,Service 用 mock | 快 | 了解 |
集成测试(@SpringBootTest) |
启动整个应用 + 真实数据库 | 慢 | 少用 |
前端人对照
JUnit 对标前端的 Vitest / Jest。@Test = it(),assertEquals = expect().toBe(),@BeforeEach = beforeEach()。思想完全一样。
建议¶
- 工具方法(加密、转换、Result 封装)多写单元测试;
- 业务接口用 Postman 手动测为主;
- 关键流程(登录、下单)写一两个集成测试兜底。