MockMVC自动化测试接口返回404问题排查

MockMVC自动化测试接口返回404问题排查

背景描述

某次在调试新到手的项目的代码,项目是个提供restful API接口的服务型web工程,惯例先为其添加单元测试。单元测试考虑借助MockMVC来进行自动化测试。首先为工程添加相关依赖

  • pom文件依赖(包括spring-test,junit,mockito,hamcrest,其中junit版本要求高于4.12)
  • 单元测试代码准备,例行公事,直接粘贴了过往的单元测试的代码
  • 查看controller层的注册方法和参数以及工程文档准备测试用例

单元测试代码入下

//@ContextConfiguration(classes = {TestBeanConfig.class})
@RunWith(SpringJUnit4ClassRunner.class)
@WebAppConfiguration(value = "src/main/webapp")
@ContextConfiguration("classpath:applicationContext.xml")

public class Test {

    @Autowired
    WebApplicationContext wac;

    private MockMvc mockMvc;

    @Before
    public void setUp(){
        mockMvc = MockMvcBuilders.webAppContextSetup(wac).build();
    }

    @Test
    public void testController() throws Exception{
        String message = "";
        mockMvc.perform(MockMvcRequestBuilders.get("/createIndex"))
                .andExpect(MockMvcResultMatchers.status().isOk())
                .andDo(MockMvcResultHandlers.print())
                .andReturn();

    }
}

问题现象

讲道理正常这一套流程下来是没问题的,但是执行后返回404。

  1. 先查看是否缺少注解,测试注解和@controller注解
  2. 其次看注解值是否正确@WebAppConfiguration(value = "src/main/webapp")
    但是都没问题,但是注意到日志上说该接口并未注册到DispatchServlet中,那么说明哪里很正常的配置肯定出问题了。

解决方式

反应过来去看了applicationContext.xml文件,发现包扫描语句

被我不慎误操作删除。这种错误看似小,但是由于日志本身提供的信息过少,又是常用的文件,一般来说很难排查到,本次排查过程也是为自己提供了一个新的错误可能发生点。

你可能感兴趣的:(MockMVC自动化测试接口返回404问题排查)