TioBootTest:环境与 AOP 初始化
TioBootTest 是测试初始化工具,不是 JUnit 运行器,也不会自动启动 HTTP 服务器、创建测试数据库或回滚数据。本章依据 nexus.io.tio.boot.testing.TioBootTest 当前源码。
方法与边界
| 方法 | 实际行为 |
|---|---|
load(env) | 非 null 时设置 APP_ENV,然后调用 EnvUtils.load() |
runWith(classes) | 加载环境,对指定类调用 AOP 注解初始化 |
runWith(env, classes) | 指定环境后初始化列出的类,不执行主类包扫描 |
runWith(bootConfig) | 加载环境并调用 BootConfiguration.config();异常包装为 RuntimeException |
run(env, primarySources) | 加载环境、扫描主类,再初始化扫描结果 |
run(primarySources) | 使用默认环境执行上述扫描流程 |
load(null) 不主动设置环境名,最终环境由有效配置决定,不能假定自动使用 test 环境。当前 run 的扫描异常会打印堆栈,不是所有失败都会按统一异常传播;应断言配置确实生效。
JUnit 生命周期
JUnit 5 使用 @BeforeAll / @BeforeEach,JUnit 4 使用 @BeforeClass / @Before。@AopBefore 不是这里所需的 JUnit 生命周期注解。
import nexus.io.context.BootConfiguration;
import nexus.io.tio.boot.testing.TioBootTest;
import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.assertTrue;
public class ConfigurationTest {
@Test
void invokesExplicitConfiguration() {
boolean[] called = {false};
BootConfiguration config = () -> called[0] = true;
TioBootTest.runWith(config);
assertTrue(called[0]);
}
}
此例仅演示 API 调用。业务测试应断言查询、校验与事务结果,不应仅打印结果。项目自行添加 JUnit Jupiter 和兼容的 Surefire 配置,TioBootTest 不会自动添加测试引擎。
状态隔离
EnvUtils、AOP 和服务器单例具有进程级状态,涉及不同配置的测试不要未经隔离就在同一个 JVM 中并行执行。只初始化本次需要的配置,并关闭自己创建的资源。
数据库配置即使从测试类调用也可能连接业务数据库。隔离方案见 数据库集成测试。真实 HTTP 测试需要启动实际服务器,见 下一章。
