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>
复制代码

 github

posted @   zzhi.wang  阅读(637)  评论(0编辑  收藏  举报
编辑推荐:
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
阅读排行:
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?
点击右上角即可分享
微信分享提示