Mockito MockBean不能mock MyBatis Mapper解决方法


问题描述

我在使用 MockBean 注解来模拟 MyBatis 接口(interface)的bean(例如 DAO)时遇到了问题。

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

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

我的集成测试用@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT) 注释并包含以下字段:

@MockBean
private OrderDAO orderDAO;

当我运行这样的测试并查看对 OrderDAO 对象的引用是什么时,在我的集成测试中我看到:

com.example.dao.OrderDAO$MockitoMock$1819884459

但在我的 OrderService 类中,该字段是这样的:

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

因此,对 Mockito.verify 的调用显然不起作用,因为我的模拟尚未注入到我的 OrderService 类中。

解决方案

必须将mapper的bean的名称添加到模拟 bean 注解中:

@MockBean(name = "orderDAO")
private OrderDAO orderDAO;


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM