immersed-in-the-deep-sea

导航

 

因为要补充单测,一般的springbootTest不是真正意义上的单测。

我们需要mock数据库的连接,而不是真正的调用。

所以我觉得mockito测试框架就挺好的

pom引入如下代码,这里用inline是因为我要用到静态方法的调用。

        <dependency>
            <groupId>org.mockito</groupId>
            <artifactId>mockito-inline</artifactId>
            <version>3.7.7</version>
            <scope>test</scope>
        </dependency>

 

在测试类前加入

@RunWith(MockitoJUnitRunner.class)

在里面的字段里

主要测试的service字段加上

@InjectMocks注解,这个注解的作用是对该类自动注入所有需要Mock的对象,就是注入依赖对象。

他所调用的字段加上

@Mock注解。这个一般是用作什么呢?

就是写模拟如下:

when(xxx方法).thenReturn(结果);

如果测试的service类有调用本身的mybatisplus的方法,一定要加上@Spy,这个注解是对里面的方法进行真实调用

 

举例这样使用:

@InjectMocks

@Spy

xxxservice

 

@mock

xxxMapper

@Test
    public void test() {
        xxxInfoEntity xxxInfo=new xxxInfoEntity();
        xxxInfo.setStatus(xxxStatus.ONLINE.getValue());

        when(xxxService.getBaseMapper()).thenReturn(xxxMapper);
        when(xxxService.getBaseMapper().selectById(anyString())).thenReturn(xxxInfo);

        Boolean result;
        try{
            result=xxxService.deregisterxxx("xxx");
        }catch (Exception e){
            log.error(""+e);
            result=false;
        }
        Assert.assertFalse(result);
    }

 

如果有静态方法,这样使用

try (MockedStatic<类> mb = Mockito
            .mockStatic(类名.class)) {
            mb.when(()->类的方法).thenReturn(list);

            //注意:调用待测试方法的时候一定要在try里面写

        }

 

posted on 2024-04-09 16:38  沉浸深海  阅读(1043)  评论(0)    收藏  举报