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 に答える