0


SpringBoot 单元测试 - 登录与注册的单元测试应该这样写!

👉 请点赞支持这款 全新设计的脚手架 ,让 Java 再次伟大!

在这里插入图片描述

初识 SpringBoot 中的标准单元测试应该怎么写

不要全部使用 @SpringBootTest

使用

@SpringBootTest

进行单元测试会启动整个 Spring Boot 容器,并引入整个项目的

development&test

依赖。缺点是速度慢、体积大、测试目标不明确、低内聚高耦合。

明确我们要测试的目标是登录功能,所以只要启动 Spring Mvc 的依赖范围就可以了,其他层面的依赖可以用「打桩」来解决。

使用 @WebMvcTest

所以只需要隔离启动 Spring Mvc 环境,即可完成登录功能的测试了。

@WebMvcTest(value ={SignController.class})@Import({HttpFireWallConfig.class})classSignMvcTest{@MockBeanprivateSignService signService;@MockBeanprivateCookieJwt cookieJwt;@AutowiredprivateMockMvc mockMvc;@Test@WithMockUservoidsignIn_givenValidHttpRequest_shouldSucceedWith200()throwsException{String stubUsername ="test_04cb017e1fe6";String stubPassword ="test_567472858b8c";SignInDto signInDto =newSignInDto();
    signInDto.setUsername(stubUsername);
    signInDto.setPassword(stubPassword);when(signService.signIn(signInDto)).thenReturn(1L);
    mockMvc
        .perform(post("/auth/sign-in").contentType(MediaType.APPLICATION_JSON).content("""
                {
                  "username": "test_04cb017e1fe6",
                  "password": "test_567472858b8c"
                }
                 """).with(csrf())).andExpect(status().isOk());}@Test@WithMockUservoidsignIn_givenInValidHttpRequest_shouldFailedWith400()throwsException{String stubUsername ="test_04cb017e1fe6";String stubPassword ="test_567472858b8c";SignInDto signInDto =newSignInDto();
    signInDto.setUsername(stubUsername);
    signInDto.setPassword(stubPassword);when(signService.signIn(signInDto)).thenReturn(1L);
    mockMvc
        .perform(post("/auth/sign-in").contentType(MediaType.APPLICATION_FORM_URLENCODED).content("""
                   {
                     "username": "test_04cb017e1fe6",
                     "password": "test_567472858b8c"
                   }
                    """).with(csrf())).andExpect(status().isBadRequest());when(signService.signIn(signInDto)).thenReturn(1L);
    mockMvc
        .perform(post("/auth/sign-in").contentType(MediaType.APPLICATION_JSON).content("""
                       {
                         "username": "test_04cb017e1fe6"
                       }
                        """).with(csrf())).andExpect(status().isBadRequest());}}

严格来说,上面是一个结合测试

单元测试的框架体系一般分为三种 :

  • e2e (接口)测试
  • 结合测试
  • 方法(单元)测试

上面的案例是一个典型的结合测试。如何区分这些不同的测试呢?答案是按照依赖范围。结合测试一般会依赖某种特定的环境,针对某种特定环境下的代码的业务表现进行测试,SpringMvc 就是一种典型的场景。

仔细想想,如果你采用三层架构来搭建你的项目,还有什么场景也是结合测试的场景?这个答案留给大家思考,也可以本帖中回复一起讨论。

更多的单元测试写法

想看更多的单元测试代码,就下载下面的项目吧:👇

一款全新设计的脚手架 ,让 Java 再次伟大!
在这里插入图片描述


本文转载自: https://blog.csdn.net/ccmjga/article/details/143104341
版权归原作者 ccmjga 所有, 如有侵权,请联系我们删除。

“SpringBoot 单元测试 - 登录与注册的单元测试应该这样写!”的评论:

还没有评论