欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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分享。没点深入的。。希望后面技术能更深入一点。

 

  1.