springboot 接口單元測(cè)試

在使用springboot框架開(kāi)發(fā)接口時(shí),都免不了寫(xiě)接口單元測(cè)試。

1.controller單元測(cè)試(業(yè)務(wù)類(lèi)參與)
2.controller單元測(cè)試(業(yè)務(wù)類(lèi)mock)

導(dǎo)入依賴(lài)包:

<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-test</artifactId>
  <scope>test</scope>
</dependency>

單元測(cè)試代碼:

@RunWith(SpringRunner.class)
@SpringBootTest
@FixMethodOrder(MethodSorters.NAME_ASCENDING)
@AutoConfigureMockMvc
public class UserControllerTest_bak {

    @Autowired
    MockMvc mockMvc;

    final String ID = "test_user";

    /**
     * 如果業(yè)務(wù)類(lèi)沒(méi)有開(kāi)發(fā)好,但是要做接口測(cè)試時(shí)
     * @MockBean
     * UserService userService
     */
//    @MockBean
//    UserService userService;


    User user;

    @Before
    public void setUp() throws Exception {
        user = new User();
        user.setId(ID);
        user.setName(ID);
    }


    @Test
    public void test_01_saveUser() throws Exception {
        String requestJson = JSON.toJSON(user).toString();
        User user1= new User();
        user1.setId("ok");
        /**
         * 如果userService沒(méi)有開(kāi)發(fā)完成則,使用mock代替
         * @MockBean: 將mock的bean替換掉 SpringBoot 管理的原生bean,從而達(dá)到mock的效果
         *
         * 如果userService參與實(shí)際邏輯,則注釋掉Mockito.when().thenReturn()方法
         * */
//        Mockito.when(userService.insert(Mockito.any(User.class))).thenReturn(user1);
        mockMvc.perform(MockMvcRequestBuilders.post("/users/").contentType(MediaType.APPLICATION_JSON).content(requestJson))
                .andExpect(MockMvcResultMatchers.status().isOk())
                .andExpect(MockMvcResultMatchers.jsonPath("$.status").value(201))
                .andDo(MockMvcResultHandlers.print());

        mockMvc.perform(MockMvcRequestBuilders.post("/users/").contentType(MediaType.APPLICATION_JSON).content(requestJson))
                .andExpect(MockMvcResultMatchers.status().isOk())
                .andExpect(MockMvcResultMatchers.jsonPath("$.status").value(400))
                .andDo(MockMvcResultHandlers.print());
    }


    @Test
    public void test_02_updateUserByPut() throws Exception {
        user.setName(ID+"_update");
        String requestJson = JSON.toJSON(user).toString();
        mockMvc.perform(MockMvcRequestBuilders.put("/users/").contentType(MediaType.APPLICATION_JSON).content(requestJson))
                .andExpect(MockMvcResultMatchers.status().isOk())
                .andExpect(MockMvcResultMatchers.jsonPath("$.status").value(200))
                .andDo(MockMvcResultHandlers.print());

        user.setId(ID+"_update");
        requestJson = JSON.toJSON(user).toString();
        mockMvc.perform(MockMvcRequestBuilders.put("/users/").contentType(MediaType.APPLICATION_JSON).content(requestJson))
                .andExpect(MockMvcResultMatchers.status().isOk())
                .andExpect(MockMvcResultMatchers.jsonPath("$.status").value(400))
                .andDo(MockMvcResultHandlers.print());
    }

    @Test
    public void test_03_getUserById() throws Exception {
        mockMvc.perform(MockMvcRequestBuilders.get("/users/"+ID))
                .andExpect(MockMvcResultMatchers.status().isOk())
                .andExpect(MockMvcResultMatchers.jsonPath("$.status").value(200))
                .andDo(MockMvcResultHandlers.print());;

    }

    @Test
    public void test_04_deleteUserById() throws Exception {
        mockMvc.perform(MockMvcRequestBuilders.delete("/users/"+ID))
                .andExpect(MockMvcResultMatchers.status().isOk())
                .andExpect(MockMvcResultMatchers.jsonPath("$.status").value(200))
                .andDo(MockMvcResultHandlers.print());

        mockMvc.perform(MockMvcRequestBuilders.delete("/users/"+ID))
                .andExpect(MockMvcResultMatchers.status().isOk())
                .andExpect(MockMvcResultMatchers.jsonPath("$.status").value(400))
                .andDo(MockMvcResultHandlers.print());
    }
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容