gpt4 book ai didi

java - 错误 : Unable to find @SpringBootConfiguration when doing @WebMvcTest for Spring Controller

转载 作者:IT老高 更新时间:2023-10-28 21:09:33 41 4
gpt4 key购买 nike

我正在测试下面给出的 Controller

@Controller
public class MasterController {

@GetMapping("/")
public String goLoginPage(){
return "index";
}
}

我关注 this用于测试我的 Controller 的 Spring 文档。现在,我想通过仅实例化 Web 层而不是文档中给出的整个 Spring 上下文来测试我的 Controller 。下面是我的代码。

@RunWith(SpringRunner.class)
@WebMvcTest
public class MasterControllerTestWithWebLayer {

@Autowired
MockMvc mockMvc;

@Autowired
MasterController masterController;


@Before
public void setUp() throws Exception {
}

@After
public void tearDown() throws Exception {
}

@Test
public void testLoginHome() throws Exception{
mockMvc.perform(get("/"))
.andExpect(status().isOk())
.andExpect(view().name("index"));
}

}

当我运行此测试时,我收到错误 Unable to find @SpringBootConfiguration,...etc。但是我很困惑为什么当我们不希望它实例化它但只想使用 Web 层时它要求 Spring 配置。请指出这里发生的事情的正确方向。以及如何解决这个问题。谢谢

最佳答案

所以这里是解决方案:

documentation on detecting test configuration说:

The search algorithm works up from the package that contains the test until it finds a @SpringBootApplication or @SpringBootConfiguration annotated class. As long as you’ve structure your code in a sensible way your main configuration is usually found.

所以 @SpringBootApplication 类在包层次结构中应该比测试类更高,例如,如果测试类在包 com.zerosolutions.controller 中,那么 @ SpringBootApplication 类应该在高于 com.zerosolutions.controller 包的包中,即 com.zerosolutionscom

问题

但如果 @SpringBootApplication 类与测试类处于同一级别,它将无法找到它,即 com.zerosolutions.general。在这种情况下,您将收到以下错误:

java.lang.IllegalStateException: Unable to find a @SpringBootConfiguration, you need to use @ContextConfiguration or @SpringBootTest(classes=...) with your test

解决方案

如果您正在运行集成测试,您可以像这样显式提及 @SpringBootApplication

@RunWith(SpringRunner.class)
@SpringBootTest(classes={SpringBootApp.class})

但是,如果您想对 Controller 进行单元测试,则不需要启动整个 Spring 上下文。您可以将 @SpringBootTest 替换为 @WebMvcTest(MasterController.class)。这将仅使用 MasterController 实例化 Web 层,而不是整个 Spring 上下文。

问题

但问题是你会再次遇到我们之前遇到的错误:

java.lang.IllegalStateException: Unable to find a @SpringBootConfiguration, you need to use @ContextConfiguration or @SpringBootTest(classes=...) with your test

@WebMvtTest 没有像 @SpringBootTest 这样的 classes 属性来明确提及 @SpringBootApplication 类.所以有两种解决方案。

解决方案

First:将您的应用程序类移动到比测试类更高的包,即 com.zerosolutionscom 包。

第二个:如下所示明确提及您的 @SpringBootApplication

@RunWith(SpringRunner.class)
@WebMvcTest(MasterController.class)
@ContextConfiguration(classes={SpringBootApp.class})

希望能消除 Spring 测试配置的困惑。谢谢

关于java - 错误 : Unable to find @SpringBootConfiguration when doing @WebMvcTest for Spring Controller,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43515279/

41 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com