Spring Boot中无法Autowired注入MockMvc的问题求助
解决MockMvc无法自动注入的问题
方法一:修正@WebMvcTest的使用
检查包导入正确性
确保导入的@WebMvcTest是org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTest,避免导入其他同名类。确认测试依赖完整性
检查项目构建文件中是否包含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'
- 修正测试类代码
补充请求构建器的导入,确保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
相关产品推荐
相关产品推荐

