MockMvc模擬對controller進行單元測試


本文為博主原創,未經允許不得轉載:

 MockMvc實現了對Http請求的模擬,能夠直接使用網絡的形式,轉換到Controller的調用,這樣可以使得測試速度快、不依賴網絡環境,

而且提供了一套驗證的工具,這樣可以使得請求的驗證統一而且很方便。

MockMvc用到的注解 :

@RunWith(SpringJUnit4ClassRunner.class): 表示使用Spring Test組件進行單元測試;

@ContextConfiguration: 配置文件路徑,用於加載和初始化spring 環境,

如果有多個配置文件,可以將括號中的信息配置為一個字符串數組來表示;


---也可通過注解進行事務配置//配置事務的回滾,對數據庫的增刪改都會回滾,便於測試用例的循環利用

@TransactionConfiguration(transactionManager = "transactionManager", defaultRollback = true)

@Transactional

以下為項目中用到的MockMvc進行單元測試的方法,

---spring-dal-test.xml該文件為數據庫配置bean的配置以及事務回滾配置的文件

---spring-service-test.xml該文件為項目中依賴的資源配置初始化加載文件

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = { "classpath:conf/spring/spring-dal-test.xml",
        "classpath:conf/spring/spring-service-test.xml" })
public class AdminUserManageControllerTest {

    @Autowired
    private AdminUserManageController adminUserManageController;

    private MockMvc mockMvc;

    @Before
    public void setup() {
        // 初始化構建
        mockMvc = MockMvcBuilders.standaloneSetup(adminUserManageController).build();
    }

    @Test
    public void queryAdminUserByPageTest001() throws Exception {
        // 分頁查詢用戶信息
        mockMvc.perform(   //執行一個RequestBuilder請求,會自動執行SpringMVC的流程並映射到相應的控制器執行處理;
            post("/adminUserManage/queryAdminUserByPage")  //模擬請求的url,及請求的方法是post
            .content("{\"pageNum\":1,\"pageSize\":20}"))   //請求的參數體
                .andExpect(
                    status().isOk()    //預期返回的狀態碼是200
                    )
                    .andReturn().getResponse().getContentAsString();  //將相應的數據轉換為字符串
    }
}    

 常用方法總結:

perform:執行一個RequestBuilder請求,會自動執行SpringMVC的流程並映射到相應的控制器執行處理;
get:聲明發送一個get請求的方法。MockHttpServletRequestBuilder get(String urlTemplate, Object... urlVariables):根據uri模板和uri變量值得到一個GET請求方式的。另外提供了其他的請求的方法,如:post、put、delete等。
param:添加request的參數,如上面發送請求的時候帶上了了pcode = root的參數。假如使用需要發送json數據格式的時將不能使用這種方式,可見后面被@ResponseBody注解參數的解決方法
andExpect:添加ResultMatcher驗證規則,驗證控制器執行完成后結果是否正確(對返回的數據進行的判斷);
andDo:添加ResultHandler結果處理器,比如調試時打印結果到控制台(對返回的數據進行的判斷);
andReturn:最后返回相應的MvcResult;然后進行自定義驗證/進行下一步的異步處理(對返回的數據進行的判斷);


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM