Java中如何为executeUpdateNativeQuery编写无数据库依赖的JUnit测试用例
测试方案实现
核心思路是用Mockito框架Mock掉数据库执行方法executeUpdateNativeQuery,只验证方法的参数组装、SQL拼接逻辑是否符合预期,完全不需要对接任何真实/内存数据库。
前置依赖
你需要在项目中引入Mockito测试依赖,以Maven为例:
<dependency> <groupId>org.mockito</groupId> <artifactId>mockito-core</artifactId> <version>4.11.0</version> <scope>test</scope> </dependency> <dependency> <groupId>org.mockito</groupId> <artifactId>mockito-junit-jupiter</artifactId> <version>4.11.0</version> <scope>test</scope> </dependency>
测试用例代码
假设待测试方法属于类ExtActionedRecordDao,测试代码如下:
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; import org.mockito.Spy; import org.mockito.junit.jupiter.MockitoExtension; import java.util.List; import java.util.Map; import static org.mockito.ArgumentMatchers.eq; import static org.mockito.Mockito.verify; @ExtendWith(MockitoExtension.class) public class ExtActionedRecordDaoTest { // 用Spy注解实现部分Mock:deleteExistingRecord走真实逻辑,仅拦截内部调用的数据库执行方法 @Spy private ExtActionedRecordDao extActionedRecordDao; @Test public void testDeleteExistingRecord_withValidIds() throws Exception { // 构造测试入参 List<String> testIds = List.of("test_id_01", "test_id_02", "test_id_03"); // 执行待测试方法 extActionedRecordDao.deleteExistingRecord(testIds); // 验证数据库执行方法被正确调用,传入的SQL、参数完全符合预期 verify(extActionedRecordDao).executeUpdateNativeQuery( eq("DELETE FROM REG.EXT_ACTIONED_RECORD T WHERE EXT_SRC_ID in :extSourceIds"), eq(Map.of("extSourceIds", testIds)) ); } @Test public void testDeleteExistingRecord_withEmptyIds() throws Exception { // 空列表场景测试,可根据你的业务逻辑调整验证规则 List<String> emptyIds = List.of(); extActionedRecordDao.deleteExistingRecord(emptyIds); verify(extActionedRecordDao).executeUpdateNativeQuery( eq("DELETE FROM REG.EXT_ACTIONED_RECORD T WHERE EXT_SRC_ID in :extSourceIds"), eq(Map.of("extSourceIds", emptyIds)) ); } }
补充说明
- 这种测试属于纯单元测试,仅验证业务逻辑(参数封装、SQL拼接)的正确性,不会产生任何真实的数据库交互,执行速度极快
- 如果
executeUpdateNativeQuery是你注入的独立DAO工具类/持久化框架(如JdbcTemplate、EntityManager)的方法,把@Spy换成@Mock注入对应的工具类实例,再把待测试类实例化时传入这个Mock对象即可,验证逻辑完全一致
内容的提问来源于stack exchange,提问作者Siva Sai kiran
相关产品推荐
相关产品推荐

