Junit測試的特點:
1).不用在每個類裏寫Main方法進行測試;
2).可以得到每個方法執行所消耗的時間
測試準備:
1).Jar包:
<dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.9</version> <scope>test</scope> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-test</artifactId> <version> 3.2.4.RELEASE </version> <scope>provided</scope> </dependency>
|
2).註解:
@RunWith(SpringJUnit4ClassRunner.class) 註解讓測試運行於Spring測試環境;
@ContextConfiguration() 加載Spring的配置文件
使用Junit對controller層進行測試:
方法一(直接注入bean,調用方法):只測試了方法,不建議用
1).在要測試的方法上加註解: @RunWith和@ContextConfiguration
2).模擬request和response(一般在@Before中完成)
request = new MockHttpServletRequest(); response = new MockHttpServletResponse(); |
3).初始化resquest和response
(向request和response中設置數據)
request.setContentType(“application/octet-stream”);設置請求類型 request.setParameter("userName", "admin");設置請求參數 request.setContent(“aa”.getBytes());將請求的內容設置爲字節數組(有向body設置內容的作用) |
4).調用業務邏輯,此時通過request取得的值就是設置的值
Request.getContentType()//application/octet-stream |
方法二:使用MockMVC模擬通過URL的接口調用,MOCKMVC是springmvc提供的controller層的測試類
1).類上加註解:
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration
@WebAppConfiguration:測試環境使用的ApplicationContext將是WebApplicationContext類型的(在集成web環境測試中使用)
2).聲明MockMVC或者Controller和WebApplicationContext
3).在setUp中構造MockMVC(兩種方式:StandaloneMockMvcBuilder和DefaultMockMvcBuilder):必須在測試方法前執行,否則報錯
集成Web環境測試:MockMvcBuilders.webAppContextSetup(context).build();
獨立測試:MockMvcBuilders.standaloneSetup(ConvertController).build();
4).MockMVC
示例: ResultActions resultActions = mockMvc .perform(post("/convert") .contentType(MediaType.APPLICATION_JSON) .content("abc".getBytes())); MvcResult mvcResult = resultActions.andReturn(); int result = mvcResult.getResponse().getStatus(); |
備註:
Perform():執行一個requestbuilder請求,會自動執行Springmvc流程並映射到對應的控制器
ContentType():設置請求方式
Content():設置請求內容
Param(“xx”,”xx”):設置參數
andReturn():返回MVCResult
ResultActions:
調用MockMVC.perform()返回的是resultActions,它有三個功能:
- ResultActions andExpect(ResultMatcher matcher) :添加驗證斷言來判斷執行請求後的結果是否是預期的
andExpect(status().is(400)):response中的status是否是400 |
- ResultActions andDo(ResultHandler handler) :添加結果處理器,用於對驗證成功後執行的動作,如輸出請求/結果信息用於調試
andDo(print():打印 手動導包: Import static org.springframework.test.web.servlet.result.MockMvcResultHandlers.print; |
c.MvcResult andReturn() :返回驗證成功後的MvcResult;用於自定義驗證/下一步的異步處理