在使用@WebMvcTest
注解测试Spring Boot控制器时,默认情况下,它会仅扫描当前控制器类及其依赖的Bean,而不会加载整个应用程序上下文中的其他控制器。然而,如果你发现它似乎加载了上下文中的其他控制器,可能是由于以下原因:
@WebMvcTest
默认会扫描当前包及其子包中的组件。如果你的其他控制器位于当前包或其子包中,它们也会被加载。basePackages
属性来限制扫描的包范围: @WebMvcTest(basePackages = "com.example.controller") @WebMvcTest
会自动配置Spring MVC基础设施,但不会加载完整的应用程序上下文。如果你发现其他控制器被加载,可能是因为某些自动配置类触发了这些控制器的加载。@TestConfiguration
)以确保没有引入不必要的组件。以下是一个简单的示例,展示如何使用@WebMvcTest
来测试单个控制器:
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
仅加载你指定的控制器及其必要的依赖,而不会加载上下文中的其他控制器。
没有搜到相关的沙龙
领取专属 10元无门槛券
手把手带您无忧上云