当前位置:坤哥网-kwan-mockito 使用 mybatis-plus 报错 MybatisPlusException: can not find lambda cache for...

mockito 使用 mybatis-plus 报错 MybatisPlusException: can not find lambda cache for...

2021/12/23 11:23:42 IT综合阅读(2101) 评论(1)

报错 MybatisPlusException: can not find lambda cache for this property xx of entity

问题描述


使用 mockito 进行单元测试,使用 mybatis-plus 操作数据库。

mybatis-plus 相关依赖:


    <dependency>
        <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>3.1.2</version>
        </dependency>
    <dependency>
        <groupId>com.baomidou</groupId>
        <artifactId>dynamic-datasource-spring-boot-starter</artifactId>
        <version>3.0.0</version>
    </dependency>


    <dependency>
        <groupId>org.mockito</groupId>
        <artifactId>mockito-core</artifactId>
        <version>2.23.4</version>
        <scope>test</scope>
    </dependency>

测试代码如下:


@Testpublic void getInfoWithSuccess(){
    List<SomeInfoPO> SomeInfoPOS = getSomeInfoPOList();
    Mockito.when(SomeInfoMapper.selectList(Mockito.any())).thenReturn(SomeInfoPOS);
    ...}

报错如下:


com.baomidou.mybatisplus.core.exceptions.MybatisPlusException: can not find lambda cache for this property [addrId] of entity [com.xx.xx.common.domain.po.xx.SomeInfoPO]

SomeInfoMapper 中的 selectList 方法使用到了 select 方法(选取具体的字段),如果把select注释掉就不会报错,那么问题就是这个。


问题解决


要快速解决这个问题,只需要在 mockito 方法执行前加 TableInfoHelper.initTableInfo(new MapperBuilderAssistant(new MybatisConfiguration(), ""), xxxxDO.class);,比如本次添加 TableInfoHelper.initTableInfo(new MapperBuilderAssistant(new MybatisConfiguration(), ""), SomeInfoPO.class);

实际开发时可以将用到的类放到 @BeforeClass 注解的方法内。
如果有好几个类,可以封装成一个方法,如:


private void initTableInfoForClassList(Class<?>... clazzList) {
    for (Class<?> clazz : clazzList) {
        TableInfoHelper.initTableInfo(new MapperBuilderAssistant(new MybatisConfiguration(), ""), clazz);
    }}

然后直接调用该方法,如:


initTableInfoForClassList(Class1.class,Class2.class,Class3.Class);


标签: mybatis-plus mockito
分类: 技术问题记录

有话要说? =>【不用注册,直接登录】,然后刷新本页面来发表您的观点(●'◡'●)