私は Mockito の使用方法を学ぼうとしていますが、特定のオブジェクトのメソッドが X 回呼び出されたことを確認する方法に夢中になっています。
次のテストコードがあります
verify(record, times(1)).setValue(Mockito.any(String.class),Mockito.any(String.class));
そして、私がテストしようとしている次の本番コード
string[] を繰り返し処理するように設定しています
protected String[] columnNames = {"_id", "created_at", "updated_at", "name"};
protected ColumnType[] columnTypes = {ColumnType.INTEGER, ColumnType.TIMESTAMP, ColumnType.TIMESTAMP, ColumnType.TEXT};
ループ内にあり、String[] を反復処理する製品コード
for (int i = 0; i < columnCount; i++) {
if (columnNames[i].equals("_id")) {
record.setId(cursor.getInt(0));
} else {
switch (columnTypes[i]) {
case BOOL:
record.setValue(columnNames[i], cursor.getInt(i));
break;
case TEXT:
record.setValue(columnNames[i], cursor.getString(i));
break;
case INTEGER:
record.setValue(columnNames[i], cursor.getInt(i));
break;
case TIMESTAMP:
record.setValue(columnNames[i], cursor.getLong(i));
break;
case LONG:
record.setValue(columnNames[i], cursor.getLong(i));
break;
case DOUBLE:
record.setValue(columnNames[i], cursor.getDouble(i));
break;
default:
record.setValue(columnNames[i], "");
break;
}
}
}
そして、これは私が得るエラーです
testDataSourceCanFindRecord(com.test.app.DataSourceTest) 経過時間: 0.081 秒 <<< 失敗! org.mockito.exceptions.verification.TooManyActualInvocations: customer.setValue(, ); 1回欲しかった: - > com.test.app.DataSourceTest.testDataSourceCanFindRecord(DataSourceTest.java:141)でしかし、3回でした。望ましくない呼び出し: -> com.test.core.DataSource.cursorToRecord(DataSource.java:210) で
String[] の「name」フィールドのために、record.setValue(String key, String value) が 1 回呼び出されることを期待しています。何が起こっているのかというと、Mockito は record.setValue(String key, Long value) を record.setValue(String key, String value) と同じものとして登録していますが、これは正しくありません。行 210 は、TIMESTAMP の場合の setValue です。どうすればこれを修正できますか?