JDBI映射器JUnit测试

JDBI映射器JUnit测试,junit,mapper,jdbi,Junit,Mapper,Jdbi,我想对我的JDBI映射器类进行单元测试,因为并非所有类都进行简单的属性映射 我的测试类如下所示: public class IdentRuleMapperTest { @Mock ResultSet resultSet; @Mock ResultSetMetaData resultSetMetaData; @Mock StatementContext ctx; IdentRuleMapper mapper; @Before public void

我想对我的JDBI映射器类进行单元测试,因为并非所有类都进行简单的属性映射

我的测试类如下所示:

  public class IdentRuleMapperTest {

  @Mock
  ResultSet resultSet;

  @Mock
  ResultSetMetaData resultSetMetaData;

  @Mock
  StatementContext ctx;

  IdentRuleMapper mapper;

  @Before
  public void setup() {
    mapper = new IdentRuleMapper();
  }

  @Test
  public void mapTest() throws SQLException {
    Mockito.when(resultSet.getString("ID")).thenReturn("The ID");
    Mockito.when(resultSet.getString("NAME")).thenReturn("The name");
    Mockito.when(resultSet.getString("REGULATION")).thenReturn("CRS");
    Mockito.when(resultSet.getString("JSON_ACTIONS_STRING")).thenReturn("the json string");
    IdentRule identRule = mapper.map(0, resultSet, ctx);

  }
}
测试将NPE抛出到线路上

Mockito.when(resultSet.getString(“ID”))。然后返回(“ID”)


任何人都可以向我指出为什么这不起作用?

在设置模拟对象的期望值时,使用匹配器进行参数匹配

Mockito.when(resultSet.getString( Matchers.eq("ID"))).thenReturn("The ID");

注释
@Mock
不会自行创建模拟对象。您必须将规则作为字段添加到测试中

@Rule
public MockitoRule rule = MockitoJUnit.rule();
或者使用它的

或者在
之前的方法中使用


猜测:您是否使用
@RunWith(MockitoJUnitRunner.class)
来确保对ResultSet注释进行了计算?
@RunWith(MockitoJUnitRunner.class)
public class IdentRuleMapperTest {
  ...
@Before
public void initMocks() {
  MockitoAnnotations.initMocks(this);
}