利用springmvc整合的Junit對controller進行單體測試

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的配置文件

使用Junitcontroller層進行測試:

方法一(直接注入bean,調用方法):只測試了方法,不建議用

   1).在要測試的方法上加註解: @RunWith@ContextConfiguration

 

   2).模擬requestresponse(一般在@Before中完成)

 

request = new MockHttpServletRequest();

response = new MockHttpServletResponse();

 

 3).初始化resquestresponse

 

      (向requestresponse中設置數據)

request.setContentType(“application/octet-stream”);設置請求類型

request.setParameter("userName", "admin");設置請求參數

request.setContent(“aa”.getBytes());將請求的內容設置爲字節數組(有向body設置內容的作用)

 

   4).調用業務邏輯,此時通過request取得的值就是設置的值

 

Request.getContentType()//application/octet-stream

 

方法二:使用MockMVC模擬通過URL的接口調用,MOCKMVCspringmvc提供的controller層的測試類

 

   1).類上加註解:

   @RunWith(SpringJUnit4ClassRunner.class)

   @ContextConfiguration

@WebAppConfiguration測試環境使用的ApplicationContext將是WebApplicationContext類型的(在集成web環境測試中使用)

2).聲明MockMVC或者ControllerWebApplicationContext

 

3).setUp中構造MockMVC(兩種方式:StandaloneMockMvcBuilderDefaultMockMvcBuilder):必須在測試方法前執行,否則報錯

 

集成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,它有三個功能:

 

  1. ResultActions andExpect(ResultMatcher matcher) :添加驗證斷言來判斷執行請求後的結果是否是預期的

andExpect(status().is(400)):response中的status是否是400

 

  1. ResultActions andDo(ResultHandler handler) :添加結果處理器,用於對驗證成功後執行的動作,如輸出請求/結果信息用於調試

andDo(print():打印

手動導包:

Import static

org.springframework.test.web.servlet.result.MockMvcResultHandlers.print;

 

cMvcResult andReturn() :返回驗證成功後的MvcResult;用於自定義驗證/下一步的異步處理

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章