immersed-in-the-deep-sea

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5
统计
 

因为要补充单测,一般的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   沉浸深海  阅读(654)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· C#/.NET/.NET Core技术前沿周刊 | 第 29 期(2025年3.1-3.9)
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
 
点击右上角即可分享
微信分享提示