目前有個保存接口有問題,前端雙擊保存調用兩次接口,而生成ID策略是時間戳,這樣並發情況下導致重復,
於是想自己寫一個單元測試類,調用controller接口。在網上找了好幾個也不行,后來經過摸索,已實現,親測有效。
之前好多都是這樣的
private MockMvc mockMvc; @Autowired private WebApplicationContext webApplicationContext; @Before public void setUp() throws Exception{ //MockMvcBuilders.webAppContextSetup(WebApplicationContext context):指定WebApplicationContext,將會從該上下文獲取相應的控制器並得到相應的MockMvc; mockMvc = MockMvcBuilders.webAppContextSetup(webApplicationContext).build();//建議使用這種 } @Test
。。。。。。
但是試了之后並沒有效果,而且經測試 :
mockMvc = MockMvcBuilders.webAppContextSetup(webApplicationContext).build();//建議使用這種
這行代碼完全不需要
下面是我的代碼:
/** * @author chichenglong * @date 2019/6/14 10:29 */ @RunWith(SpringRunner.class) @SpringBootTest @WebAppConfiguration @AutoConfigureMockMvc public class ProjectRecipeControllerTest { @Autowired private MockMvc mockMvc; // @Autowired // private WebApplicationContext webApplicationContext; // // @Before // public void setUp() throws Exception{ // //MockMvcBuilders.webAppContextSetup(WebApplicationContext context):指定WebApplicationContext,將會從該上下文獲取相應的控制器並得到相應的MockMvc; // mockMvc = MockMvcBuilders.webAppContextSetup(webApplicationContext).build();//建議使用這種 // } @Test public void save() throws Exception{ ProjectRecipeVo vo = new ProjectRecipeVo(); ProjectRecipeDTO dto = new ProjectRecipeDTO(); dto.setPatientNumber("1234564564"); dto.setPatientId("YYHZ20190612LEEB"); vo.setProjectRecipeDTO(dto); MvcResult mvcResult=mockMvc.perform(MockMvcRequestBuilders.post("/projectRecipe/save") .content(FastJsonUtil.toJSONString(vo))) .andReturn(); int status=mvcResult.getResponse().getStatus(); String content =mvcResult.getResponse().getContentAsString(); // Assert.assertEquals(200,status); // Assert.assertEquals("success",content); MvcResult mvcResultSecond=mockMvc.perform(MockMvcRequestBuilders.post("/projectRecipe/save") .content(FastJsonUtil.toJSONString(vo))) .andReturn(); } }
重點注意下,@RunWith(SpringRunner.class)這個注釋一定要有,因為調用controller方法需要重啟一個controller,要運行,就需要一個端口,這個可以隨機開啟一個端口供測試用。
