SpringMvc使用junit、MockMvc測試controller 簡單用例

1.引入依賴

<dependency>
	<groupId>junit</groupId>
	<artifactId>junit</artifactId>
	<version>4.12</version>
</dependency>
<dependency>  
     <groupId>org.springframework</groupId>  
     <artifactId>spring-test</artifactId>  
     <version>4.3.6.RELEASE</version>
     <scope>test</scope>  
</dependency>  

2.需要測試controller

	/**
	 * junit測試
	 * @param request
	 * @return
	 */
	@RequestMapping(value = "/junit",produces={"application/json; charset=UTF-8"})
	@ResponseBody
	public Result junit(HttpServletRequest request) {
		
		return Result.success();
		
	}	

3.封裝baseTest,需要測試的controller繼承這個類即可

@RunWith(SpringJUnit4ClassRunner.class)
@WebAppConfiguration
@ContextConfiguration(locations = { "classpath:/*.xml" })
@ComponentScan(basePackages = { "com.cmedicine.core.action" })
//當然 你可以聲明一個事務管理 每個單元測試都進行事務回滾 無論成功與否
//@TransactionConfiguration( transactionManager = "transactionManager",defaultRollback = true)
//@Transactional
public class BaseTest<T> {
	public Logger logger = LoggerFactory.getLogger(getClass());

	@Autowired
	private WebApplicationContext wac;

	protected MockMvc mockMvc;

	protected MockHttpServletRequest request;
	protected MockHttpServletResponse response;

	/**
	 * 初始化SpringmvcController類測試環境
	 */
	@Before
	public void setup() {
		// 實例化方式一
//	     mockMvc = MockMvcBuilders.webAppContextSetup(wac).build();

		// 實例化方式二
		mockMvc = MockMvcBuilders.standaloneSetup(getT()).build();
	}

	/**
	 * 根據泛型實例化
	 * @return
	 */
	private T getT() {
		Type genericSuperclass = this.getClass().getGenericSuperclass();
		// 獲取類型第一個泛型參數
		ParameterizedType parameterizedType = (ParameterizedType) genericSuperclass;
		Class<T> modelClass = (Class<T>) parameterizedType.getActualTypeArguments()[0];
		T Object = null;
		try {
			Object = modelClass.newInstance();
		} catch (InstantiationException | IllegalAccessException e) {
			e.printStackTrace();
			System.out.println("模型構造失敗...");
		}
		return Object;
	}
}

4.測試類

public class TestActionTest extends BaseTest<TestAction> {

	@Test
	public void testJunit() {
	     try {
	    	 	ResultActions resultActions = mockMvc
	    	 			.perform(MockMvcRequestBuilders.get("/test.do/junit"));
	            MvcResult mvcResult = resultActions
	            		.andDo(MockMvcResultHandlers.print())
	            		.andExpect(MockMvcResultMatchers.status().isOk())
	            		.andReturn();
			String result = mvcResult.getResponse().getContentAsString();
			System.out.println("==========結果爲:==========\n" + result + "\n");
	        } catch (Exception e) {
	            e.printStackTrace();
	        }
	}

}

5.運行junit Test

可以看到我們測試成功了

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