SpringBoot Unit Test入門

1. Junit工作原理

使用JUnit測試,不用自己在測試類中寫很多main函數測試。

單元測試返回值都爲空(public void)。單元測試通過的標準(滿足下面其中一個條件即可):

a)測試方法運行完沒有拋出異常. 

b)測試方法拋出的異常,和“expect”定義的異常一致

當滿足標準, Eclipse自動判斷測試通過。

 

2 Unit Test  in SpringBoot

用如下註解修飾測試

@RunWith(SpringRunner.class)   //運行測試的類。 不寫這個的情況下,會//直接用JUnit去跑。 SpringRunner是JUnit的擴展
@SpringBootTest  //可以加測試的參數,如端口
@AutoConfigureMockMvc  // 測試RestAPI的時候會用到。 封裝了TestRestTemplate的相關功能

package com.github.binarywang.demo.wx.mp.controller;

import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get;
import static org.springframework.test.web.servlet.result.MockMvcResultHandlers.print;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.content;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;

import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
import org.springframework.test.web.servlet.MockMvc;

@RunWith(SpringRunner.class)
@SpringBootTest
@AutoConfigureMockMvc
public class WxPortalControllerTest {

	@Autowired
	private MockMvc mockMvc;

	@Test
	public void testAuthGet() throws Exception {

		this.mockMvc
				.perform(get("/wx/portal/wx23bb34a1ff46582d")
						.param("signature", "93d0ef82f9e01a94971d2fb4eb6aca61f29509aa").param("timestamp", "1558536215")
						.param("nonce", "9874674366").param("echostr", "dfdkasjdfaskdjf"))
				.andDo(print()).andExpect(status().isOk()).andExpect(content().string("dfdkasjdfaskdjf"));
		;

	}

}

 

2.1 測試Service層

2.2 測試Controller層

通過MockMvc類去觸發api

a)perfrom()的參數是要創建一個Request

通過MockMvcRequestBuilders 去創建,get()其實是MockMvcRequestBuilders.get().因爲import了這個類,所以可以簡寫

import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get;

 

get()返回的是MockHttpServletRequestBuilder. MockHttpServletRequestBuilder.param())是爲了創建Request,所以它返回的依然是MockHttpServletRequestBuilder,所以,假如有多個參數,可以直接用多個param()方法引入

b)Perform()的返回值是ResultActions

ResultActions.andExcept()用於判斷運行結果,起到斷言的作用。 它的參數是MockMvcResultMatchers。通過

MockMvcResultMatchers.status()判斷返回值

MockMvcResultMatchers.content(),獲取response content的屬性/內容去比較

返回值爲string是

andExpect(content().string("dfdkasjdfaskdjf"))

返回值爲Json

andExpect(MockMvcResultMatchers.jsonPath("$.name").value("Mock測試2"))

比較返回值contenttype

.andExpect(MockMvcResultMatchers.content().contentType(MediaType.APPLICATION_JSON_UTF8))

 

另外一種情況是通過ResultActions.andReturn(),返回一個MvcResult,用其他斷言去比較返回結果

 

 

參考文章

https://www.cnblogs.com/ysocean/p/6889906.html

https://www.jianshu.com/p/72b19e24a602

https://www.jianshu.com/p/91045b0415f0

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