SpringBoot项目单元测试

Posted shunyang

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SpringBoot项目单元测试相关的知识,希望对你有一定的参考价值。

前一段时间,有朋友问到springboot运用如何进行单元测试,结合LZ公司的实际运用,这里给大家描述一下三种单元测试的方式。

1.约定

单元测试代码写在src/test/java目录下
单元测试类命名为*Test,前缀为要测试的类名

2. 使用mock方式单元测试

Spring测试框架提供MockMvc对象,可以在不需要客户端-服务端请求的情况下进行MVC测试,完全在服务端这边就可以执行Controller的请求,跟启动了测试服务器一样。
测试开始之前需要建立测试环境,setup方法被@Before修饰。通过MockMvcBuilders工具,使用WebApplicationContext对象作为参数,创建一个MockMvc对象。

@RunWith(SpringRunner.class)
@SpringBootTest(classes = Application.class)//这里的Application是springboot的启动类名
@WebAppConfiguration
public class StyleControllerTest {

    @Autowired
    private WebApplicationContext context;

    private MockMvc mockMvc;

    private ObjectMapper mapper = new ObjectMapper();

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

    @Test
    public void testSend() throws Exception {
        Long id =1l;
        //调用接口,传入添加的用户参数
        mockMvc.perform(MockMvcRequestBuilders.get("/style/listStyleById")
                .contentType(MediaType.APPLICATION_JSON_UTF8)
                .content(mapper.writeValueAsString(id)))
                .andExpect(MockMvcResultMatchers.status().isOk())
                .andExpect(MockMvcResultMatchers.content().contentType(MediaType.APPLICATION_JSON_UTF8))
                .andDo(MockMvcResultHandlers.print());

    }

}

3. 使用Feign方式单元测试

以下是Feign接口的单元测试示例,启动项目,可以测试本jar提供的服务,不启动服务,改为远程服务地址,可以测试远程jar提供的服务
其中

@EnableFeignClients(clients = UserControllerTest.UserServiceFeignClient.class)

类似我们实际应用调用相关服务一样。

@RunWith(SpringJUnit4ClassRunner.class)
@SpringBootTest(classes = UserControllerTest.class)
@Import({ FeignAutoConfiguration.class, HttpMessageConvertersAutoConfiguration.class })
@EnableFeignClients(clients = UserControllerTest.UserServiceFeignClient.class)
public class UserControllerTest {

    @FeignClient(value = "loan-server", url = "http://localhost:9070/")
    public interface UserServiceFeignClient extends UserServiceClient {
    }

    @Autowired
    private UserServiceFeignClient userServiceFeignClient;

    @Test
    public void getUser() {
        User user = userServiceFeignClient.getSDKUserById(1);
        System.out.println(user);
    }
}

4. 使用Http Rest API 单元测试

使用RestTemplate发起GET或POST请求,其中@SpringBootTest这两行注释掉就不启动SpringBoot容器直接进行远程调用测试

@RunWith(SpringJUnit4ClassRunner.class)
public class LoanControllerTest {

    private  final  static String url =  "http://localhost:9070/";

    private static RestTemplate restTemplate = new RestTemplate();

    @Test
    public void test(){
        ResponseEntity<String> response = restTemplate.exchange(url + "/loan/getLoanById?id=1" ,
                HttpMethod.GET,
                new HttpEntity(null),
                String.class);
        System.out.println("result: " + response.getBody());
    }
}

欢迎大家扫码关注我的微信公众号,与大家一起分享技术与成长中的故事。
技术分享图片

以上是关于SpringBoot项目单元测试的主要内容,如果未能解决你的问题,请参考以下文章

补习系列-springboot 单元测试之道

如何编写单元测试JWordPress前台项目实战

java~springboot~h2数据库在单元测试中的使用

SpringBoot 集成JUnit

Eclipse搭建springboot项目单元测试

idea中springboot项目单元测试