我是靠谱客的博主 鲤鱼发箍,最近开发中收集的这篇文章主要介绍Mockito使用,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

Mockito基本用法

  1. Mock.mock(clazz)

    // 一般使用静态导入方法
    List<String> mockList = Mockito.mock(ArrayList.class);
    
  2. @Mock(以下两种方式二选一)

    1. 运行每个测试方法前使用MockitoAnnotations.initMocks(this)
    2. 单元测试类上添加注解@ExtendWith(MockitoExtension.class)
    //@ExtendWith(MockitoExtension.class)
    public class MockitoTest {
    
      @Mock
      private List<String> mockList;
        
      private List<String> mockList2 = spy(ArrayList.class);
    
      @BeforeEach
      public void beforeEach() {
        MockitoAnnotations.initMocks(this);
      }
        
      @Test
      void testMethod(){
        // mockList仍然为空,mockList2含一个元素
        mockList.add("yangcx");
        mockList2.add("yangcx");
     	// 执行次数验证
        verify(mockList, times(2)).size();
        verify(mockList, atLeast(1)).size();
        verify(mockList, atMost(10)).size();
        // 执行顺序验证
        mockList.size();
        mockList.add("add a parameter");
        mockList.clear();
    
        InOrder inOrder = inOrder(mockList);
    
        inOrder.verify(mockList).size();
        inOrder.verify(mockList).add("add a parameter");
        inOrder.verify(mockList).clear();
        // 异常验证
        assertThrows(NullPointerException.class, () -> mockMap.get("mghio"));     
      }
    }
    
    1. 使用Mockito.verify进行方法执行验证。比如方法调用验证、方法调用次数验证、方法调用顺序验证等
    2. 对使用@Mock注解的对象执行任何操作都不会影响源对象的状态
    3. 需要Mock对象产生真实方法调用,可以使用Mockito.spy(clazz)实现
  3. @InjectMock

    1. @Mock创建一个Mock
    2. @InjectMock创建一个实例,其余使用@Mock(@Spy)注解的Mock将被注入到此实例中,管理依赖
    @ExtendWith(MockitoExtension.class)
    public class UserServiceTest {
     
        @Mock
        private MyRepository myRepository;
     
        @InjectMocks
        private MyService myService;
     
        @Test
        public void testInjectMocks() {
            System.out.println(myService.getMyRepository().getClass());
        }
    }
    
  4. @MockBean

    1. Mockito框架提供此注解将mock对象注入到Spring容器中,该对象会对容器中任何现有相同类型的bean进行替换;
    2. 如果版本为SpringBoot2.0+且当前容器中已有相同类型的bean时,需要设置spring.main.allow-bean-definition-overriding=true允许bean定义覆盖

@Mock vs @InjectMocks

  • Usually when you are unit testing, you shouldn’t initialize Spring context. So remove Autowiring
  • Usually when you do integration testing, you should use real dependencies. So remove mocking

最后

以上就是鲤鱼发箍为你收集整理的Mockito使用的全部内容,希望文章能够帮你解决Mockito使用所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(38)

评论列表共有 0 条评论

立即
投稿
返回
顶部