You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.23 21:37:07