JDBI 映射器 JUnit 测试

JDBI mapper JUnit tests

我想对我的 JDBI 映射器 classes 进行单元测试,因为并非所有人都做琐碎的 属性 映射。

我的测试 class 如下所示:

  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");

任何人都可以向我指出为什么这行不通吗?

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

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

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

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

或使用它的JUnit runner

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

或使用 MockitoAnnotations

@Before 方法中创建模拟
@Before
public void initMocks() {
  MockitoAnnotations.initMocks(this);
}