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

如何在迁移场景下使用JUnit 4测试Quarkus应用?

Quarkus环境下JUnit 4测试适配方案

问题描述

将应用迁移至Quarkus时,JUnit 5测试通过@QuarkusTest和@TestHTTPResource注解可正常注入测试URL并通过断言,但相同写法的JUnit 4测试中,@TestHTTPResource注入的URL始终为null,导致断言失败。

成功的JUnit 5测试代码

package com.example.project;

import io.quarkus.test.common.http.TestHTTPResource;
import io.quarkus.test.junit.QuarkusTest;

import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;

import java.net.URL;

@QuarkusTest
public class JUnit5Test {
  @TestHTTPResource
  URL url;

  @Test
  public void sampleJunit5Test() {
    Assertions.assertNotNull(url); // ✅ Passes
  }
}

失败的JUnit 4测试代码

package com.example.project;

import io.quarkus.test.common.http.TestHTTPResource;
import io.quarkus.test.junit.QuarkusTest;

import org.junit.Assert;
import org.junit.Test;

import java.net.URL;

@QuarkusTest
public class JUnit4Test {
  @TestHTTPResource
  URL url;

  @Test
  public void sampleJunit4Test() {
    Assert.assertNotNull(url); // ❌ java.lang.AssertionError
  }
}

解决方案

Quarkus对JUnit 4的依赖注入逻辑与JUnit 5不同,需按以下步骤调整:

1. 添加Quarkus JUnit 4扩展依赖

在构建文件中引入专属扩展,确保Quarkus能处理JUnit 4的测试生命周期和依赖注入:

Maven(pom.xml):

<dependency>
    <groupId>io.quarkus</groupId>
    <artifactId>quarkus-junit4</artifactId>
    <scope>test</scope>
</dependency>

Gradle(build.gradle):

testImplementation 'io.quarkus:quarkus-junit4'

2. 调整测试代码的注入方式

JUnit 4不支持直接通过@TestHTTPResource字段注入,需改用以下两种方式之一:

方式一:通过@Inject获取TestHTTPResource实例

package com.example.project;

import io.quarkus.test.common.http.TestHTTPResource;
import io.quarkus.test.junit.QuarkusTest;
import org.junit.Assert;
import org.junit.Test;
import javax.inject.Inject;
import java.net.URL;

@QuarkusTest
public class JUnit4Test {

    @Inject
    private TestHTTPResource testHTTPResource;

    @Test
    public void sampleJunit4Test() {
        URL url = testHTTPResource.getUrl();
        Assert.assertNotNull(url); // ✅ 正常运行
    }
}

方式二:通过QuarkusTestExtension获取基础URL

package com.example.project;

import io.quarkus.test.junit.QuarkusTest;
import io.quarkus.test.junit.QuarkusTestExtension;
import org.junit.Assert;
import org.junit.Test;
import java.net.URL;

@QuarkusTest
public class JUnit4Test {

    @Test
    public void sampleJunit4Test() {
        URL url = QuarkusTestExtension.getDeployment().getBaseUrl();
        Assert.assertNotNull(url); // ✅ 正常运行
    }
}

3. 确认运行器配置

如果测试类自定义了JUnit 4运行器,需替换为io.quarkus.junit.QuarkusJUnit4TestRunner,不过添加quarkus-junit4依赖后,@QuarkusTest注解会自动关联正确的运行器,无需手动配置。


内容的提问来源于stack exchange,提问作者Nicolapps

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 19:07:10