スプリングブートテスト

1.依存性

<spring-boot.version>2.4.2</spring-boot.version>

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

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

2. テストコードの作成

AdminController.java

package com.example.springboot_test.controller;

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.HashMap;


@RestController
public class AdminController {

    @GetMapping("/demo01")
    public HashMap<String, Object> applyList() {
        HashMap<String, Object> res = new HashMap<>();
        res.put("code", 200);
        return res;
    }
}

SpringBootTestApplicationTests.java

package com.example.springboot_test;

import org.junit.jupiter.api.Disabled;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.web.servlet.MockMvc;
import org.springframework.test.web.servlet.MvcResult;
import org.springframework.test.web.servlet.request.MockMvcRequestBuilders;
import org.springframework.test.web.servlet.result.MockMvcResultHandlers;
import org.springframework.test.web.servlet.result.MockMvcResultMatchers;

import javax.annotation.Resource;

@SpringBootTest
@AutoConfigureMockMvc
class SpringBootTestApplicationTests {
    @Resource
    private MockMvc mockMvc;
    @Test
    @DisplayName("测试/demo01接口")
    void contextLoads() throws Exception {
        MvcResult mvcResult = mockMvc.perform(MockMvcRequestBuilders.get("/demo01")
                        .header("token", "aabbcc")
                        .param("userName", "admin"))
                .andExpect(MockMvcResultMatchers.status().isOk()) //判断http请求
                .andDo(MockMvcResultHandlers.print())  //打印返回数据
                .andExpect(MockMvcResultMatchers.jsonPath("code").value("200")) //判断返回json数据中code是否为200
                .andReturn();
    }

}

 ポストリクエストリファレンス

    public void approveTest() throws Exception {
        CertificateAdminApplyApproveVo tem=new CertificateAdminApplyApproveVo();
        tem.setCertificateApplyNo(1120307535526494208L);
        tem.setState(5);
        tem.setRejectReason("不同意");
        MvcResult mvcResult = mockMvc.perform(MockMvcRequestBuilders.post(rootPath+"/approve")
                        .accept(MediaType.parseMediaType("application/json;charset=UTF-8"))
                        .contentType(MediaType.APPLICATION_JSON)
                        .content(JSON.toJSONString(tem))
                       )
                .andExpect(MockMvcResultMatchers.status().isOk()) //判断http请求
                .andDo(MockMvcResultHandlers.print())  //打印返回数据
                .andExpect(MockMvcResultMatchers.jsonPath("code").value("200")) //判断返回json数据中code是否为200
                .andReturn();
    }

 

3. テストを実行する


MockHttpServletRequest:
      HTTP Method = GET
      Request URI = /demo01
       Parameters = {userName=[admin]}
          Headers = [token:"aabbcc"]
             Body = null
    Session Attrs = {}

Handler:
             Type = com.example.springboot_test.controller.AdminController
           Method = com.example.springboot_test.controller.AdminController#applyList()

Async:
    Async started = false
     Async result = null

Resolved Exception:
             Type = null

ModelAndView:
        View name = null
             View = null
            Model = null

FlashMap:
       Attributes = null

MockHttpServletResponse:
           Status = 200
    Error message = null
          Headers = [Content-Type:"application/json"]
     Content type = application/json
             Body = {"code":200}
    Forwarded URL = null
   Redirected URL = null
          Cookies = []

四、問題

一部のバージョンでは @AutoConfigureMockMvc アノテーションが存在しますが、mockMvc は null です

import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
import org.springframework.test.web.servlet.MockMvc;
import org.springframework.test.web.servlet.MvcResult;
import org.springframework.test.web.servlet.request.MockMvcRequestBuilders;
import org.springframework.test.web.servlet.result.MockMvcResultHandlers;
import org.springframework.test.web.servlet.result.MockMvcResultMatchers;
import org.springframework.test.web.servlet.setup.MockMvcBuilders;
import org.springframework.web.context.WebApplicationContext;

@RunWith(SpringRunner.class)
@SpringBootTest(classes = {ResourceApplication.class}, webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
public class ApCertificateAdminControllerTest {
    @Autowired
    private WebApplicationContext webApplicationContext;
    private MockMvc mockMvc;

    /**
     * 所有测试方法执行之前执行该方法
     * 获取mockmvc对象实例
     */
    @Before
    public void before() {
        mockMvc = MockMvcBuilders.webAppContextSetup(webApplicationContext).build();
    }

    @Test
    public void applyListTest() throws Exception {
        MvcResult mvcResult = mockMvc.perform(MockMvcRequestBuilders.get("/admin/certificate/apply/list")
                        .header("token", "aabbcc")
                        .param("userName", "admin"))
                .andExpect(MockMvcResultMatchers.status().isOk()) //判断http请求
                .andDo(MockMvcResultHandlers.print())  //打印返回数据
                .andExpect(MockMvcResultMatchers.jsonPath("code").value("200")) //判断返回json数据中code是否为200
                .andReturn();
    }

}

 java.lang.NoClassDefFoundError: com/jayway/jsonpath/Predicate

依存関係を追加する

<!-- https://mvnrepository.com/artifact/com.jayway.jsonpath/json-path -->
<dependency>
    <groupId>com.jayway.jsonpath</groupId>
    <artifactId>json-path</artifactId>
    <version>2.8.0</version>
</dependency>

spring-boot-starter-testの依存関係は、プロジェクトがspring-boot-starter-testに依存していない場合は、spring-boot-starter-testの依存関係を参照して追加することができる。

  <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter</artifactId>
      <version>2.4.2</version>
      <scope>compile</scope>
    </dependency>
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-test</artifactId>
      <version>2.4.2</version>
      <scope>compile</scope>
    </dependency>
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-test-autoconfigure</artifactId>
      <version>2.4.2</version>
      <scope>compile</scope>
    </dependency>
    <dependency>
      <groupId>com.jayway.jsonpath</groupId>
      <artifactId>json-path</artifactId>
      <version>2.4.0</version>
      <scope>compile</scope>
    </dependency>
    <dependency>
      <groupId>jakarta.xml.bind</groupId>
      <artifactId>jakarta.xml.bind-api</artifactId>
      <version>2.3.3</version>
      <scope>compile</scope>
    </dependency>
    <dependency>
      <groupId>org.assertj</groupId>
      <artifactId>assertj-core</artifactId>
      <version>3.18.1</version>
      <scope>compile</scope>
    </dependency>
    <dependency>
      <groupId>org.hamcrest</groupId>
      <artifactId>hamcrest</artifactId>
      <version>2.2</version>
      <scope>compile</scope>
    </dependency>
    <dependency>
      <groupId>org.junit.jupiter</groupId>
      <artifactId>junit-jupiter</artifactId>
      <version>5.7.0</version>
      <scope>compile</scope>
    </dependency>
    <dependency>
      <groupId>org.mockito</groupId>
      <artifactId>mockito-core</artifactId>
      <version>3.6.28</version>
      <scope>compile</scope>
    </dependency>
    <dependency>
      <groupId>org.mockito</groupId>
      <artifactId>mockito-junit-jupiter</artifactId>
      <version>3.6.28</version>
      <scope>compile</scope>
    </dependency>
    <dependency>
      <groupId>org.skyscreamer</groupId>
      <artifactId>jsonassert</artifactId>
      <version>1.5.0</version>
      <scope>compile</scope>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-core</artifactId>
      <version>5.3.3</version>
      <scope>compile</scope>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-test</artifactId>
      <version>5.3.3</version>
      <scope>compile</scope>
    </dependency>
    <dependency>
      <groupId>org.xmlunit</groupId>
      <artifactId>xmlunit-core</artifactId>
      <version>2.7.0</version>
      <scope>compile</scope>
      <exclusions>
        <exclusion>
          <artifactId>jaxb-api</artifactId>
          <groupId>javax.xml.bind</groupId>
        </exclusion>
      </exclusions>
    </dependency>

おすすめ

転載: blog.csdn.net/qq_29752857/article/details/131472655