springboot單元測試通過MockMvc類調用controller接口


目前有個保存接口有問題,前端雙擊保存調用兩次接口,而生成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,要運行,就需要一個端口,這個可以隨機開啟一個端口供測試用。


免責聲明!

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



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