SpringBoot单元测试(Service测试、Controller测试、Mock测试)

前提:新建SpringBoot项目

1、Service测试

Service层测试就是常规测试,例如现在有一个HelloService:

@Service
public class HelloService {
    public String sayHello(String name){
        return "Hello " + name + " !";
    }
}

在idea工具中创建测试类快捷键Ctrl+Shift+T,具体测试代码如下:

@RunWith(SpringRunner.class)
@SpringBootTest
public class HelloServiceTest {

	@Autowired
	HelloService helloService;
	@Test
	public void contextLoads() {
		String hello = helloService.sayHello("Chen");
		Assert.assertThat(hello, Matchers.is("Hello Chen !"));//判断测试是否正确,绿色结果正确,黄色则是表示结果值错误
	}

}

运行测试类结果:

黄色表示期望值和实际值不匹配

2、Controller测试,这里需要使用到Mock测试

例如有如下Controller

@RestController
public class HelloController {

    @GetMapping("/hello")
    public String hello(String name){
        return "Hello "+ name+ " !";
    }
    @PostMapping("/book")
    public String addBook(@RequestBody Book book){
        return book.toString();
    }
}

涉及到的实体类:

public class Book {
    private Integer id;
    private String name;
    private String author;
    ...(get、set方法省略)
}

测试类代码:

@RunWith(SpringRunner.class)
@SpringBootTest
public class HelloControllerTest {

    @Autowired
    HelloService helloService;

    @Autowired
    WebApplicationContext wac;//模拟ServletContext环境
    MockMvc mockMvc;//声明MockMvc对象

    @Before
    public void before() {
        mockMvc = MockMvcBuilders.webAppContextSetup(wac).build();

    }

    @Test
    public void test1() throws Exception {
        MvcResult mvcResult = mockMvc.perform(
                MockMvcRequestBuilders
                        .get("/hello")//get请求方法
                        .contentType(MediaType.APPLICATION_FORM_URLENCODED)//请求内容类型
                        .param("name","Chen"))//参数
                .andExpect(MockMvcResultMatchers.status().isOk())//期望返回状态200
                .andDo(MockMvcResultHandlers.print())//指定打印信息
                .andReturn();//返回值
        System.out.println(mvcResult.getResponse().getContentAsString());
    }
    @Test
    public void test2() throws Exception {
        ObjectMapper om = new ObjectMapper();
        Book book = new Book();
        book.setAuthor("羅貫中");
        book.setName("三國演義");
        book.setId(1);
        String s = om.writeValueAsString(book);
        MvcResult mvcResult = mockMvc
                .perform(MockMvcRequestBuilders
                    .post("/book")
                    .contentType(MediaType.APPLICATION_JSON)
                    .content(s)
                )
                .andExpect(MockMvcResultMatchers.status().isOk())
                .andReturn();
        System.out.println(mvcResult.getResponse().getContentAsString());
    }
}

 

  • 3
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值