Micronaut可复用控制器测试超时问题解决咨询
问题解决步骤
1. 修正测试类的HttpClient使用方式
你的测试代码手动创建HttpClient并硬编码8080端口是核心问题:@MicronautTest 默认会以随机端口启动测试服务器,而非固定的8080,同时框架提供了自动配置的HttpClient供注入使用,无需手动创建。修改后的测试类如下:
package fri.so.common; import io.micronaut.http.client.HttpClient; import io.micronaut.test.extensions.junit5.annotation.MicronautTest; import jakarta.inject.Inject; import org.junit.jupiter.api.Test; import static org.junit.jupiter.api.Assertions.assertNotNull; @MicronautTest class HumansControllerTest { @Inject HttpClient client; // 注入框架配置好的HttpClient @Test void testHumans() { String response = client.toBlocking().retrieve("/humans.txt"); assertNotNull(response); // 验证响应非空 } }
2. 完善build.gradle依赖配置
当前依赖中缺少Micronaut JUnit5测试扩展的核心依赖,导致测试环境无法正确初始化服务器。补充以下依赖:
dependencies { api("io.micronaut:micronaut-http") api("io.micronaut:micronaut-http-server") testImplementation("io.micronaut:micronaut-http-server") testImplementation("io.micronaut:micronaut-http-client") // 添加测试扩展依赖 testImplementation("io.micronaut.test:micronaut-test-junit5") }
3. 确保测试资源文件存在
将humans.txt文件复制到测试资源目录 src/test/resources 下,避免测试时因找不到资源抛出异常,间接导致请求超时。
4. 优化插件配置(可选)
如果你使用Micronaut 3.x及以上版本,可在micronaut块中添加包扫描配置,确保控制器被测试环境正确识别:
micronaut { runtime("netty") testRuntime("junit5") processing { incremental(true) annotations("fri.so.common.*") // 指定需要处理的包路径 } }
内容的提问来源于stack exchange,提问作者Friso Kluitenberg
相关产品推荐
相关产品推荐

