1

我想对我的 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")).thenReturn("The ID");

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

4

2 回答 2

2

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

@Rule
public MockitoRule rule = MockitoJUnit.rule();

或使用它的JUnit 跑步者

@RunWith(MockitoJUnitRunner.class)
public class IdentRuleMapperTest {
  ...

或使用MockitoAnnotations@Before在方法中创建模拟

@Before
public void initMocks() {
  MockitoAnnotations.initMocks(this);
}
于 2015-07-31T20:22:01.260 回答
0

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

Mockito.when(resultSet.getString( Matchers.eq("ID"))).thenReturn("The ID");
于 2015-07-31T09:27:42.500 回答