SpringBoot Controller Post接口单元测试示例

网友投稿 524 2023-01-18


SpringBoot Controller Post接口单元测试示例

概述

在日常的开发中,我们一般会定义一个service层,用于实现业务逻辑,并且针对service层会有与之对应的齐全的覆盖率高的单元测试。而对于controller层,一般不怎么做单元测试,因为主要的核心业务逻辑都在service层里,controller层只是做转发,调用service层接口而已。但是还是建议使用单元测试简单的将controller的方法跑一下,看看转发和数据转换的代码是否能正常工作。

在Spring Boot里对controller层进行单元测试非常简单,只需要几个注解和一点点辅助代码即可搞定。

依赖的包

org.junit.jupiter

junit-jupiter-api

test

org.junit.jupiter

junit-jupiter-engine

test

org.springframework.boot

spring-boot-starter-test

test

com.alibaba

fastjson

使用的Spring Boot 版本

2.0.4.RELEASE

代码

@ExtendWith(SpringExtension.class)

@SpringBootTest(webEnvironment =SpringBootTest.WebEnvironment.MOCK,classes = TestApplication.class)

@AutoConfigureMockMvc

public class UserControllerTest {

@Autowired

private MockMvc mockMvc;

@MockBean

private UserService userService;

@Test

@DisplayName("测试controller方法")

void test() throws Exception {

User param = new User();

param.setUserId(1111);

List

Address address = new Address();

address.setName("我的地址");

addressList.add(address);

param.setAddressList(addressList);

MvcResult mvcResult = mockMvc.perform(

post("/xxx/test")

.contentType(MediaType.APPLICATION_JSON)

.content(JSON.toJSONString(param)))

.andReturn();

System.out.println(mvcResult.getResponse().getContentAsString());

}

}

@RequestMapping(value = "/xxx", method = RequestMethod.POST)

public Object test(@RequestBody(required = false)User user) throws Exception {

}

如果你只是想简单的跑一下controller层,不想真正的去执行service方法的话,需要使用@MockBean将对应的service类mock掉。

@MockBean

private UserService userService;

使用Spring Boot Test的时候,它需要一个ApplicationContext,我们可以在@SpringBootTest注解中使用classes属性来指定。

@SpringBootTest(webEnvironment =SpringBootTest.WebEnvironment.MOCK,classes = TestApplication.class)

TestApplication的代码很简单。

@SpringBootApplication

public class TestApplication {

public static void main(String[] args){

SpringApplicationBuilder builder = new SpringApplicationBuilder();

builder.environment(new StandardEnvironment());

builder.sources(TestApplication.class);

builder.main(TestApplication.class);

builder.run(args);

}

}

接下来我们只需要使用MockMvc发送post请求即可。如果controller层的post方法是带@RxjJxTequestBody注解的,可以先将入参对象转换成JSON字符串。这里使用的是fastjson。

JSON.toJSONString(param)

经过测试,如上代码能正常工作。

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对我们的支持。如果你想了解更多相关内容请查看下面相关链接


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:开源接口管理工具有哪些(开源接口管理工具有哪些功能)
下一篇:软件研发管理平台研究现状(软件研发管理平台研究现状怎么写)
相关文章

 发表评论

暂时没有评论,来抢沙发吧~