首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Spring Boot Testing @WebMvcTest for a Controller似乎加载上下文中的其他控制器

在使用@WebMvcTest注解测试Spring Boot控制器时,默认情况下,它会仅扫描当前控制器类及其依赖的Bean,而不会加载整个应用程序上下文中的其他控制器。然而,如果你发现它似乎加载了上下文中的其他控制器,可能是由于以下原因:

  1. 组件扫描
    • @WebMvcTest默认会扫描当前包及其子包中的组件。如果你的其他控制器位于当前包或其子包中,它们也会被加载。
    • 你可以通过指定basePackages属性来限制扫描的包范围: @WebMvcTest(basePackages = "com.example.controller")
  2. 自动配置
    • @WebMvcTest会自动配置Spring MVC基础设施,但不会加载完整的应用程序上下文。如果你发现其他控制器被加载,可能是因为某些自动配置类触发了这些控制器的加载。
    • 你可以通过排除某些自动配置类来限制加载: @WebMvcTest(excludeAutoConfiguration = {SomeAutoConfiguration.class})
  3. 依赖注入
    • 如果你的控制器依赖于其他控制器或服务,Spring Boot会尝试解析这些依赖。确保你的测试类中没有无意中引入了不必要的依赖。
  4. 测试配置
    • 你可能在测试配置中显式地声明了其他控制器或Bean。检查你的测试配置文件(如@TestConfiguration)以确保没有引入不必要的组件。

以下是一个简单的示例,展示如何使用@WebMvcTest来测试单个控制器:

代码语言:javascript
复制
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.*;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.*;

import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTest;
import org.springframework.test.web.servlet.MockMvc;

@WebMvcTest(YourController.class)
public class YourControllerTest {

    @Autowired
    private MockMvc mockMvc;

    @Test
    public void testEndpoint() throws Exception {
        mockMvc.perform(get("/your-endpoint"))
               .andExpect(status().isOk());
    }
}

通过上述方法,你可以确保@WebMvcTest仅加载你指定的控制器及其必要的依赖,而不会加载上下文中的其他控制器。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

没有搜到相关的沙龙

领券