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
可以看到我們測試成功了