spring-boot Test for Controller

Posted   智信智爱智强不息

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了spring-boot Test for Controller相关的知识,希望对你有一定的参考价值。

spring-boot  controller 测试示例:

单元测试类

package com.zzhi;

import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.ObjectWriter;
import com.fasterxml.jackson.databind.SerializationFeature;
import com.sun.org.apache.xerces.internal.xs.LSInputList;
import javafx.application.Application;
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.http.MediaType;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import org.springframework.test.context.web.WebAppConfiguration;
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.setup.MockMvcBuilders;
import org.springframework.web.context.WebApplicationContext;

import java.nio.charset.Charset;
import java.util.ArrayList;
import java.util.List;

import static org.springframework.test.web.servlet.result.MockMvcResultHandlers.print;

/**
 * Created by zhangzhii on 2017/7/13.
 */
@RunWith(SpringJUnit4ClassRunner.class)
@SpringBootTest(classes = MaventestApplication.class)
@WebAppConfiguration
public class HomeControllerTest {
    public static final MediaType APPLICATION_JSON_UTF8 = new MediaType(MediaType.APPLICATION_JSON.getType(), MediaType.APPLICATION_JSON.getSubtype(), Charset.forName("utf8"));

    @Autowired
    private WebApplicationContext wac;

    private MockMvc mockMvc;

    @Before
    public void setUp() throws Exception {
        mockMvc = MockMvcBuilders.webAppContextSetup(wac).build();
    }

    @Test
    public void test1() throws Exception {
        String name="zzhi";
        MvcResult result = mockMvc.perform(MockMvcRequestBuilders.get("/test1?name="+ name)).
                andDo(print()).andReturn();
        System.out.println(result.getResponse().getContentAsString());
    }

    @Test
    public void test02() throws Exception {

        User user = new User(28, "zzhi");
        ObjectMapper mapper = new ObjectMapper();
        mapper.configure(SerializationFeature.WRAP_ROOT_VALUE, false);
        ObjectWriter ow = mapper.writer().withDefaultPrettyPrinter();
        String requestBody = ow.writeValueAsString(user);
        System.out.println(requestBody);
        MvcResult result = mockMvc.perform(MockMvcRequestBuilders.post("/test2?name=zzhi").
                contentType(APPLICATION_JSON_UTF8).content(requestBody))
                .andDo(print()).andReturn();
        System.out.println(result);
    }


    @Test
    public void test03() throws Exception {


        List<User> list = new ArrayList<>();
        list.add(new User(28, "zzhi"));
        list.add(new User(32, "wang"));
        ObjectMapper mapper = new ObjectMapper();
        mapper.configure(SerializationFeature.WRAP_ROOT_VALUE, false);
        ObjectWriter ow = mapper.writer().withDefaultPrettyPrinter();
        String requestBody = ow.writeValueAsString(list);
        System.out.println(requestBody);
        MvcResult result = mockMvc.perform(MockMvcRequestBuilders.post("/test3?name=zzhi").
                contentType(APPLICATION_JSON_UTF8).content(requestBody))
                .andDo(print()).andReturn();
        System.out.println("结果:"+result.getResponse().getContentAsString());
    }




    @Test
    public void test04() throws Exception {

        Order order=new Order();

        Address address=new Address();
        address.setAdd1("陕西西安");

        List<User> users = new ArrayList<>();
        users.add(new User(28, "zzhi"));
        users.add(new User(32, "wang"));

        order.setUsers(users);
        order.setAddress(address);
        ObjectMapper mapper = new ObjectMapper();
        mapper.configure(SerializationFeature.WRAP_ROOT_VALUE, false);
        ObjectWriter ow = mapper.writer().withDefaultPrettyPrinter();
        String requestBody = ow.writeValueAsString(order);
        System.out.println(requestBody);
        MvcResult result = mockMvc.perform(MockMvcRequestBuilders.post("/test4?age=28").
                param("name","张智").
                contentType(APPLICATION_JSON_UTF8).content(requestBody))
                .andDo(print()).andReturn();
        System.out.println("结果:"+result.getResponse().getContentAsString());
    }
}

Controller 类

package com.zzhi;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.bind.annotation.*;

import javax.servlet.http.HttpServletRequest;
import java.util.List;

/**
 * Created by zhangzhii on 2017/7/12.
 */
@RestController()
public class HomeController {

    private static final Logger logger = LoggerFactory.getLogger(HomeController.class);

    @RequestMapping("/index")
    @ResponseBody
    public String Home() {
        logger.info("home/index 开始");
        return "hello world 111";

    }

    @RequestMapping("/test1")
    @ResponseBody
    public String test1(String name) {
        return name;

    }
    @RequestMapping(
//            consumes="application/json",
//            produces="application/json",
            method=RequestMethod.POST,
            value="/test2")
    @ResponseBody
    public String  test2(@RequestBody User user,String name) {

        return user.toString();
    }


    @RequestMapping(
            method=RequestMethod.POST,
            value="/test3")
    @ResponseBody
    public String  test3(@RequestBody List<User> users,String name) {

        return Integer.toString( users.size());
    }


    @RequestMapping(
            method=RequestMethod.POST,
            value="/test4")
    @ResponseBody
    public String  test4(HttpServletRequest request,@RequestBody Order order, String age) {

      String name=  request.getParameter("name");
      return age;
    }


}

 

PO:

package com.zzhi;

/**
 * Created by zhangzhii on 2017/7/14.
 */
public class Address {

    public Address()
    {

    }

    @Override
    public String toString() {
        return "Address{" +
                "add1=‘" + add1 + \‘ +
                };
    }

    public String getAdd1() {
        return add1;
    }

    public void setAdd1(String add1) {
        this.add1 = add1;
    }

    private String add1;
}
package com.zzhi;

import com.fasterxml.jackson.annotation.JsonProperty;

import java.util.List;

/**
 * Created by zhangzhii on 2017/7/14.
 */
public class Order {

    public Order(){

    }

    public void setUsers(List<User> users) {
        this.users = users;
    }
    @JsonProperty("users")
    private List<User> users;

    public Address getAddress() {
        return address;
    }

    public void setAddress(Address address) {
        this.address = address;
    }

    private Address address;

    public List<User> getUsers() {
        return users;
    }
}

 

package com.zzhi;

import java.util.Date;

/**
 * Created by zhangzhii on 2017/7/14.
 */
public class User {

    public User(){

    }
    public User(int age ,String name)
    {
        this.age=age;
        this.name=name;
        this.createTime= new Date();
    }

    private int age;
    private String name;


    @Override
    public String toString() {
        return "User{" +
                "age=" + age +
                ", name=‘" + name + \‘ +
                ", createTime=" + createTime +
                };
    }

    public Date getCreateTime() {
        return createTime;
    }

    public void setCreateTime(Date createTime) {
        this.createTime = createTime;
    }

    private Date createTime;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

}

pox:

    <dependencies>
        <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>
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-databind</artifactId>
            <version>2.8.7</version>
        </dependency>
    </dependencies>

 

以上是关于spring-boot Test for Controller的主要内容,如果未能解决你的问题,请参考以下文章

spring-boot-单元测试

Spring Boot Test(转)

Spring-Boot ? ShapeFile文件读写工具类+接口调用

spring-boot 需要启动nginx吗

为啥 H2 进行 spring-boot 测试,但它会将数据写入我的本地 mysql 数据库?

spring-boot入门