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