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

Spring Boot中无法Autowired注入MockMvc的问题求助

解决MockMvc无法自动注入的问题

方法一:修正@WebMvcTest的使用

  1. 检查包导入正确性
    确保导入的@WebMvcTest是org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTest,避免导入其他同名类。

  2. 确认测试依赖完整性
    检查项目构建文件中是否包含Spring Boot测试 starter 依赖:

  • Maven(pom.xml):
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-test</artifactId>
    <scope>test</scope>
</dependency>
  • Gradle(build.gradle):
testImplementation 'org.springframework.boot:spring-boot-starter-test'
  1. 修正测试类代码
    补充请求构建器的导入,确保HistoryController被正确导入且在Spring扫描范围内,完善请求路径:
import com.binar.kelompok3.secondhand.controller.HistoryController;
import com.binar.kelompok3.secondhand.repository.OffersRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTest;
import org.springframework.boot.test.mock.mockito.MockBean;
import org.springframework.test.web.servlet.MockMvc;
import org.springframework.test.web.servlet.request.MockMvcRequestBuilders;
import org.junit.jupiter.api.Test;

@WebMvcTest(HistoryController.class)
public class HistoryControllerTest {

    @MockBean
    private OffersRepository offersRepository;

    @Autowired
    private MockMvc mockMvc;

    @Test
    void signIn() throws Exception {
        mockMvc.perform(MockMvcRequestBuilders.get("/api/history/signin"));
    }
}

方法二:正确使用@SpringBootTest + @AutoConfigureMockMvc

避免混用JUnit 4与JUnit 5注解,移除@RunWith(SpringRunner.class)(JUnit 4注解),Spring Boot 2.2+版本中@SpringBootTest默认集成JUnit 5扩展:

import com.binar.kelompok3.secondhand.controller.HistoryController;
import com.binar.kelompok3.secondhand.repository.OffersRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc;
import org.springframework.boot.test.mock.mockito.MockBean;
import org.springframework.test.web.servlet.MockMvc;
import org.springframework.test.web.servlet.request.MockMvcRequestBuilders;
import org.junit.jupiter.api.Test;

@SpringBootTest
@AutoConfigureMockMvc
public class HistoryControllerTest {

    @MockBean
    private OffersRepository offersRepository;

    @Autowired
    private MockMvc mockMvc;

    @Test
    void signIn() throws Exception {
        mockMvc.perform(MockMvcRequestBuilders.get("/api/history/signin"));
    }
}

额外排查要点

  • 清除IntelliJ缓存:执行File -> Invalidate Caches... -> Invalidate and Restart,重新编译项目。
  • 确认HistoryController类标注了@RestController或@Controller,且所在包属于Spring Boot主启动类的扫描范围(主类包的子包,或通过@ComponentScan指定扫描路径)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 18:06:30