MockMVC自動(dòng)化測(cè)試接口返回404問(wèn)題排查
背景描述
某次在調(diào)試新到手的項(xiàng)目的代碼灿里,項(xiàng)目是個(gè)提供restful API接口的服務(wù)型web工程,慣例先為其添加單元測(cè)試。單元測(cè)試考慮借助MockMVC來(lái)進(jìn)行自動(dòng)化測(cè)試。首先為工程添加相關(guān)依賴
- pom文件依賴(包括spring-test,junit,mockito,hamcrest,其中junit版本要求高于4.12)
- 單元測(cè)試代碼準(zhǔn)備媚送,例行公事兆蕉,直接粘貼了過(guò)往的單元測(cè)試的代碼
- 查看controller層的注冊(cè)方法和參數(shù)以及工程文檔準(zhǔn)備測(cè)試用例
單元測(cè)試代碼入下
//@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();
}
}
問(wèn)題現(xiàn)象
講道理正常這一套流程下來(lái)是沒(méi)問(wèn)題的羽戒,但是執(zhí)行后返回404。
- 先查看是否缺少注解虎韵,測(cè)試注解和@controller注解
- 其次看注解值是否正確@WebAppConfiguration(value = "src/main/webapp")
但是都沒(méi)問(wèn)題易稠,但是注意到日志上說(shuō)該接口并未注冊(cè)到DispatchServlet中,那么說(shuō)明哪里很正常的配置肯定出問(wèn)題了包蓝。
解決方式
反應(yīng)過(guò)來(lái)去看了applicationContext.xml文件驶社,發(fā)現(xiàn)包掃描語(yǔ)句
<context:component-scan base-package="com.xxx"></context:component-scan>
被我不慎誤操作刪除。這種錯(cuò)誤看似小养晋,但是由于日志本身提供的信息過(guò)少衬吆,又是常用的文件,一般來(lái)說(shuō)很難排查到绳泉,本次排查過(guò)程也是為自己提供了一個(gè)新的錯(cuò)誤可能發(fā)生點(diǎn)逊抡。