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。
- 先查看是否缺少注解,测试注解和@controller注解
- 其次看注解值是否正确@WebAppConfiguration(value = "src/main/webapp")
但是都没问题,但是注意到日志上说该接口并未注册到DispatchServlet中,那么说明哪里很正常的配置肯定出问题了。
解决方式
反应过来去看了applicationContext.xml文件,发现包扫描语句
<context:component-scan base-package="com.xxx"></context:component-scan>
被我不慎误操作删除。这种错误看似小,但是由于日志本身提供的信息过少,又是常用的文件,一般来说很难排查到,本次排查过程也是为自己提供了一个新的错误可能发生点。