You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何正确编写VPartnerExtMapper的单元测试?现有代码需优化

测试代码问题分析与修正

原测试存在的问题

  • 注解与手动mock冲突:类上声明了@Mock ResultSet resultSet,但测试方法里又手动mock(ResultSet.class)创建局部对象,同时未初始化@Mock的ctx,运行时会抛出空指针异常。
  • 字段获取方式不匹配:原Mapper是通过**索引位置(1、2、3、4)**读取ResultSet,而测试里用了列名"NAME",导致映射时无法获取对应值,最终name会是null。
  • 测试覆盖不完整:只验证了name字段,tecClient、partnerId、tecVersionNr三个核心字段未测试。
  • 缺少Mockito初始化:未添加Mockito的初始化逻辑,@Mock注解的对象不会被实例化。

修正后的完整测试代码

import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mock;
import org.mockito.junit.MockitoJUnitRunner;
import org.jdbi.v3.core.statement.StatementContext;

import java.sql.ResultSet;
import java.sql.SQLException;

import static org.junit.Assert.assertEquals;
import static org.mockito.Mockito.when;

@RunWith(MockitoJUnitRunner.class)
public class VPartnerExtMapperTest {
    @Mock
    private ResultSet resultSet;

    @Mock
    private StatementContext ctx;

    private VPartnerExtMapper mapper;

    @Before
    public void setUp() {
        mapper = new VPartnerExtMapper();
    }

    @Test
    public void testMapAllFieldsCorrectly() throws SQLException {
        // 模拟ResultSet按索引返回对应值
        when(resultSet.getLong(1)).thenReturn(100L);
        when(resultSet.getLong(2)).thenReturn(200L);
        when(resultSet.getLong(3)).thenReturn(300L);
        when(resultSet.getString(4)).thenReturn("Michael");

        VPartnerExt result = mapper.map(resultSet, ctx);

        // 验证所有字段映射正确
        assertEquals(100L, result.getTecClient());
        assertEquals(200L, result.getPartnerId());
        assertEquals(300L, result.getTecVersionNr());
        assertEquals("Michael", result.getName());
    }
}

关键修正说明

  1. 统一使用Mockito注解:用@RunWith(MockitoJUnitRunner.class)让Mockito自动初始化@Mock对象,避免手动mock的混乱。
  2. 匹配Mapper的索引读取逻辑:按照Mapper里的顺序,分别模拟getLong(1)、getLong(2)、getLong(3)、getString(4)的返回值。
  3. 覆盖所有字段验证:添加对三个long类型字段的断言,确保映射逻辑完全正确。
  4. 提取初始化逻辑:用@Before方法统一初始化Mapper,提升代码复用性。

内容的提问来源于stack exchange,提问作者tiuke

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 19:05:32