当前位置: 首页 > 知识库问答 >
问题:

MockBean和MyBatis映射器不在一起工作(就像在SpringBoot2.2.7之前那样)

郑正文
2023-03-14

我使用的是MyBatis Spring Boot Starter 2.1版。3.从移动到Spring靴2.2开始。7(我也尝试过2.2.8和2.3.1,结果相同),我在使用MockBean注释模拟MyBatis接口(例如DAO)时遇到问题。假设我有一个这样的界面:

@Mapper
@Repository
public interface OrderDAO {
   int insertOrder(@Param("order") Order order);
}

我想执行一个集成测试,并在我的OrderService中模拟这个映射器,其中包含一个OrderDAO类型的字段。

我的集成测试用@SpringBootTest注释(webUNEP=SpringBootTest。Web环境。RANDOM_PORT)并包含此字段:

@MockBean
private OrderDAO orderDAO;

当我运行这样的测试并查看对OrderDAO对象的引用时,在我的集成测试中,我看到了以下内容:

com。实例刀。OrderDAO$MockitoMock$1819884459

但在我的OrderService类中,字段如下:

com.sun.proxy.$Proxy179(org.apache.ibatis.binding.MapperProxy@37d9310e)

因此,对Mockito.verify的调用显然不起作用,因为我的mock没有被注入到我的OrderService类中。现在,非常奇怪的是,我发现添加这个代码可以让一切正常工作:

@TestConfiguration
static class MockConfig {
    @Bean
    public OrderDAO orderDAO() {
        return Mockito.mock(OrderDAO.class);
    }
}

在集成测试类上添加这个嵌套类以及ContextConfiguration注释,现在注入OrderService类的对象是MockitoMock——测试类中MockBean注释字段引用的同一个对象。我不必在SpringBoot1.2上这么做。6和更早,我找不到任何可能导致这种情况的变更的参考(尽管可能我搜索的时间不够长)。

所以,我想知道我是否做得不对,或者,我是否错过了我应该做的事情?看起来这应该像以前一样工作,这就需要额外的嵌套TestConfiguration类。感谢任何人能提供的见解。谢谢

共有1个答案

单昊穹
2023-03-14

正如ave在评论中提到的,我必须将名称添加到mockbean注释中才能使其工作

@MockBean(name = "orderDAO")
private OrderDAO orderDAO;
 类似资料:
  • 主要内容:XML实现映射器,注解实现映射器,MyBatis 映射器的主要元素映射器是 MyBatis 中最重要的文件,文件中包含一组 SQL 语句(例如查询、添加、删除、修改),这些语句称为映射语句或映射 SQL 语句。 映射器由 Java 接口和 XML 文件(或注解)共同组成,它的作用如下。 定义参数类型 配置缓存 提供 SQL 语句和动态 SQL 定义查询结果和 POJO 的映射关系 映射器有以下两种实现方式。 通过 XML 文件方式实现,比如我们在 mybatis

  • controller.java UserServiceImpl.java 我得到了这个错误 应用程序启动失败 描述: 我使用的SpringBoot版本:2.1.0.发行版

  • 本文向大家介绍mybatis关系映射之一对多和多对一,包括了mybatis关系映射之一对多和多对一的使用技巧和注意事项,需要的朋友参考一下 本实例使用用户和订单的例子做说明: 一个用户可以有多个订单, 一个订单只对应一个用户。(其中应用到注释) 1.代码的结构 2. 建表语句: 3. 用户实体: 4. 订单实体: 5.写PersonMapper.java的接口 6. 一对多实体配置: Person

  • 首先,这就是为什么这个问题不是重复的: 我知道在SO上已经问了很多关于将一个转换为另一个的问题,我甚至自己回答了其中一个问题,但是我在这个主题上发现的所有问题都有一些比较不同枚举值的方法(无论是通过名称还是按价值)。在我的特殊情况下,我不知道值,名字也不匹配。 作为我正在做的一个名为ADONETHelper的GitHub项目的一部分,该项目旨在最大限度地减少与Ado一起工作时的代码重复。Net中,

  • 问题内容: 我正在尝试为各个字段使用不同的分析器设置ElasticSearch索引。但是,我似乎找不到一种设置特定于字段的分析器的方法。这是我创建(测试)索引的方法: 如果我正确阅读了文档,则应创建类型为“ tweet”的索引“ twitter”,并且应通过雪球词根分析器分析“ message”字段的内容。为了对此进行测试,我尝试了以下查询: 如果我没记错的话,那应该会受到打击,因为战斗是战斗的源