我无法在spring boot 1.4中运行简单的测试。我按照官方网站testing-the-spring-mvc-slice上的教程进行了操作,但我没有让它工作。
每次我收到以下错误:
java.lang.IllegalStateException: Unable to find a @SpringBootConfiguration, you need to use @ContextConfiguration or @SpringBootTest(classes=...) with your test
任何想法,提示?
提前致谢
修改
这是控制器
@Controller
public class UserManagementController {
@GetMapping(value = "/gs/users/getUsers")
public @ResponseBody String getAllUsers() {
return "test";
}
}
这是测试
@RunWith(SpringRunner.class)
@WebMvcTest(UserManagementController.class)
public class UserManagementControllerTest {
@Autowired
private MockMvc mvc;
@Test
public void showUserView() throws Exception {
this.mvc.perform(get("/gs/users/getUsers"))
.andExpect(status().isOk())
.andDo(print());
}
}
从我的观点来看,它与网站上的这篇文章完全一样。
@WebMvcTest
会:
@Controller
,@RestController
,@JsonComponent
等)现在为什么我需要配置一个" super"类
答案 0 :(得分:11)
搜索算法从包含测试的包开始工作 直到找到@SpringBootApplication或@SpringBootConfiguration 注释类。只要你在合理的情况下构建代码 通常可以找到您的主要配置。
所以你用 @ * Test 注释了你的测试。它运行,检查子类中的配置,找不到任何,抛出异常。
您必须在测试类的包或子包中拥有配置,或者直接将配置类传递给@ContextConfiguration
或@SpringBootTest
,或者使用@SpringBootApplication
注释类。
根据@SpringBootApplication
。我已经用@WebMvcTest
提到的方式对控制器进行了测试:如果应用程序的类标注为@SpringBootApplication
,则它会起作用,如果没有,则会失败,除非您提及。你提到的那篇文章有评论:
在这个例子中,我们省略了类,这意味着测试将会 首先尝试从任何内部类加载@Configuration,如果 如果失败,它将搜索您的主@SpringBootApplication 类。
Github discussion关于同一点。