SpingBoot2.x+Mockito+Junit5单元测试

SpingBoot2.x+Mockito+Junit5单元测试

1.引入依赖
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-test</artifactId>
    <scope>test</scope>
    <exclusions>
        <exclusion>
            <groupId>org.junit.vintage</groupId>
            <artifactId>junit-vintage-engine</artifactId>
		</exclusion>
	</exclusions>
</dependency>
2.初始化
  • idea中光标放在service类上,按下alt+insert,弹出Test,点击它,自动生成单元测试类

    如图:

  • 单元测试类中初始化mock注解对象(两种方式):

    • 类上添加@ExtendWith(MockitoExtension.class)

    • 在类中标注了@BeforeEach的方法中添加一段代码,如下:

      MockitoAnnotations.initMocks(this);
      
3.编写单元测试类
  • 前提准备

准备两个类,HelloService、HelloMapper

@Service
public class HelloService {

    @Autowired
    private HelloMapper helloMapper;

    public String hello() {
        if (helloMapper != null) {
            return helloMapper.sout();
        }
        return "";
    }
}
@Repository
public interface HelloMapper {
    
    default String sout() {
        return "666";
    }
}
  • 单元测试类编写代码(有两种方式)

    • 方式一:

      @ExtendWith(MockitoExtension.class)
      public class Junit5Mockito {
      
          @InjectMocks
          private HelloService helloService;
      	
          // 被mock的对象一定要使用public修改,不能使用private
          @Mock
          public HelloMapper helloMapper;
      
          @Test
          void testHelloService() {
              when(helloMapper.sout()).thenReturn("777");
              String hello = helloService.hello();
              // 期望值:777,该断言会success
              Assertions.assertEquals(hello, "777");
      
              // 期望值:777,该断言会error
      //        Assertions.assertEquals(hello, "666");
          }
      }
      
    • 方式二:

      class HelloServiceTest {
      
          @InjectMocks
          private HelloService helloService;
      
          @Mock
          public HelloMapper helloMapper;
          
          @BeforeEach
          void setUp() {
              MockitoAnnotations.initMocks(this);
          }
          
          /**
           * 可整合Assertions类来进行断言
           */
          @Test
          void testHelloService() {
              when(helloMapper.sout()).thenReturn("777");
              String hello = helloService.hello();
              // 期望值:777,该断言会success
              Assertions.assertEquals(hello, "777");
      
              // 期望值:777,该断言会error
      //        Assertions.assertEquals(hello, "666");
          }
      
    4.其他

    单元测试JUnit5使用:https://www.yuque.com/atguigu/springboot/ksndgx

    Junit5整合MockitoExtension扩展:https://javadoc.io/static/org.mockito/mockito-junit-jupiter/3.11.2/org/mockito/junit/jupiter/MockitoExtension.html

    Mockito官方文档:https://javadoc.io/static/org.mockito/mockito-core/3.1.0/org/mockito/Mockito.html#45

    JUnit5官方文档:https://junit.org/junit5/docs/current/user-guide/

    Springboot-testing官方文档:https://docs.spring.io/spring-boot/docs/2.2.6.RELEASE/reference/html/spring-boot-features.html#boot-features-testing
    MockitoAnnotations-api:https://javadoc.io/static/org.mockitomockito-core/3.1.0/org/mockito/MockitoAnnotations.html
    Mockito官方文档中文翻译:https://blog.csdn.net/bboyfeiyu/article/details/52127551?utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7Edefault-5.control&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7Edefault-5.control
    @Mock 和 @InjectMocks组合使用:https://www.jianshu.com/p/bb705a56f620

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值