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

JUnit 5中java.lang.NoClassDefFoundError: org/junit/rules/TestRule问题解决

解决JUnit 5中java.lang.NoClassDefFoundError: org/junit/rules/TestRule错误

问题根源

你当前使用的JUnitRestDocumentation是Spring REST Docs针对JUnit 4设计的规则类,它依赖JUnit 4的org.junit.rules.TestRule接口,但JUnit 5已移除该接口,导致类加载失败。

解决方案

1. 更新依赖

替换为Spring REST Docs适配JUnit 5的依赖:

  • Maven依赖:
<dependency>
    <groupId>org.springframework.restdocs</groupId>
    <artifactId>spring-restdocs-junit5</artifactId>
    <version>你的版本号</version>
    <scope>test</scope>
</dependency>
  • Gradle依赖:
testImplementation 'org.springframework.restdocs:spring-restdocs-junit5:你的版本号'

2. 修改测试基类

移除JUnitRestDocumentation字段,改用JUnit 5扩展类:

import org.springframework.restdocs.RestDocumentationExtension;
import org.springframework.test.context.junit.jupiter.web.SpringJUnitWebConfig;
import org.junit.jupiter.api.extension.ExtendWith;

@ExtendWith(RestDocumentationExtension.class)
@SpringJUnitWebConfig
public class BaseControllerTest {

    static {
        System.setProperty("org.jboss.logging.provider", "slf4j");
    }

    // 移除原有的JUnitRestDocumentation字段
}

3. 调整测试类MockMvc配置

在具体测试类中通过RestDocumentationContext配置MockMvc:

import org.springframework.restdocs.mockmvc.MockMvcRestDocumentation;
import org.springframework.restdocs.mockmvc.RestDocumentationRequestBuilders;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.web.servlet.MockMvc;
import org.springframework.test.web.servlet.setup.MockMvcBuilders;
import org.springframework.web.context.WebApplicationContext;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;

public class StandaloneControllerGetByIdTest extends BaseControllerTest {

    private MockMvc mockMvc;

    @Autowired
    public void setUp(WebApplicationContext webApplicationContext) {
        this.mockMvc = MockMvcBuilders.webAppContextSetup(webApplicationContext)
                .apply(MockMvcRestDocumentation.documentationConfiguration())
                .build();
    }

    @Test
    public void lookupStandaloneReturnsIsSuccessful() throws Exception {
        mockMvc.perform(
                        RestDocumentationRequestBuilders.get("/accounts", "123", "04d71b9379ef4db49c28e113485ea76d")
                                .contentType("application/json"))
                .andExpect(status().isOk());
    }
}

关键说明

  • @ExtendWith(RestDocumentationExtension.class):让JUnit 5加载Spring REST Docs扩展,替代JUnit 4的规则机制。
  • MockMvcRestDocumentation.documentationConfiguration():配置MockMvc以支持REST Docs,替代原JUnitRestDocumentation规则。
  • RestDocumentationRequestBuilders:替换Spring MVC的MockMvcRequestBuilders,用于生成文档的请求构建。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 00:27:07