Springboot controller service 单元测试 Error creating bean
程序员文章站
2022-04-26 10:28:47
...
问题:
spring boot项目进行单元测试时,照着网上教程测试自己的controller一直失败找了一上午没找到原因。下午终于成功了。
原因:
教程的controller都不带service引用,和带service引用的controller测试方法有一点区别。
写法1:不带service引用的 controller单元测试:
ConController 为需要测试的 controller,里面所有方法都不带 service引用。
@RunWith(SpringRunner.class)
@SpringBootTest(classes = ConController.class)
@WebAppConfiguration
public class ConControllerTest {
@Autowired
private WebApplicationContext webApplicationContext;
private MockMvc mockMvc;
@Before
public void setup() throws Exception{
mockMvc = MockMvcBuilders.webAppContextSetup(webApplicationContext).build();
}
@Test
public void test() throws Exception{
MvcResult mvcResult = mockMvc.perform(MockMvcRequestBuilders.post("/testpost")
.header("token","ab15acd61c")
).andDo(MockMvcResultHandlers.print()).andReturn();
System.out.println("------end----");
}
}
写法2:@Autowired 引用了service的Controller单元测试
SpringbootApplication 是此spring boot项目的启动类
CommonController 为需要测试的 controller,里面正常带有 service引用。
@RunWith(SpringRunner.class)
@SpringBootTest(classes = SpringbootApplication.class)//区别
@WebAppConfiguration
public class CommonControllerTest1 {
@Autowired
private WebApplicationContext webApplicationContext;
private MockMvc mockMvc;
@Autowired
private CommonController commonController;//区别
@Before
public void setup() throws Exception{
// mockMvc = MockMvcBuilders.webAppContextSetup(webApplicationContext).build();
mockMvc = MockMvcBuilders.standaloneSetup(commonController).build();//区别
}
@Test
public void test() throws Exception{
MvcResult mvcResult = mockMvc.perform(MockMvcRequestBuilders.post("/testpost")
.header("token","ab15acd61")
).andDo(MockMvcResultHandlers.print()).andReturn();
System.out.println("------end----");
}
第二种写法也可以兼容不带service的controller测试。但是应该是启动了整个项目慢一点。
还有就是
MockMvcBuilders.webAppContextSetup
和
MockMvcBuilders.standaloneSetup
的区别,
简单看了下 webAppContextSetup测的是已经完全初始化的,standaloneSetup相应的可以测这种需要依赖注入的。
目前发现是这样,再深入就没了
---------------------------------------------------------------------------------------------------------
好尴尬,时隔几年了还在写小bug分享。没点深入的。。希望后面技术能更深入一点。
推荐阅读
-
springboot启动时 报Error creating bean with name ‘XXXMapper‘ defined in file
-
【SpringBoot】----- Error creating bean with name 'entityManagerFactory' defined in class path resourc
-
SpringBoot报错: Error creating bean with name freeMarkerConfigurer defined in class path resource
-
Springboot controller service 单元测试 Error creating bean
-
springboot启动时 报Error creating bean with name ‘XXXMapper‘ defined in file
-
SpringBoot—单元测试模板(controller层和service层)
-
SpringBoot:单元测试:实战单元测试调用Controller-service层接口(2)