Всякий раз, когда я бегу следующий код, который я получаю сообщение об ошибке:Mocking не работает
Wanted but not invoked:
dynamoDBWriter.addItemsToDynamoTable(
<any>,
<any>
);
-> at DynamoDBWriterTest.testAllItemsAdded(DynamoDBWriterTest.java:32)
However, there were other interactions with this mock:
dynamoDBWriter.write(
[{ Item: {} }, { Item: {} }, { Item: {} }, { Item: {} }, { Item: {} }]
);
-> at DynamoDBWriterTest.testAllItemsAdded(DynamoDBWriterTest.java:31)
Ниже мой код:
public class DynamoDBWriterTest {
DynamoDBWriter dynamoDbWriter;
@Before
public void setup() {
dynamoDbWriter = mock(DynamoDBWriter.class);
}
@Test
public void testAllItemsAdded() {
List<Item> items = new ArrayList<>();
for (int index = 0; index < 5; index++) {
items.add(new Item());
}
dynamoDbWriter.write(items);
verify(dynamoDbWriter, times(5)).addItemsToDynamoTable(any(), any());
}
}
код из DynamoDBWriter:
public void write(List<Item> items) {
// Initialize the rate limiter to allow capacity units/sec
// Since we know that the Item we are putting consumes 1 unit throughput.
RateLimiter rateLimiter = RateLimiter.create(1);
// Track how much throughput we consume on each put operation
for (Item item: items) {
// Let the rate limiter wait until our desired throughput "recharges"
rateLimiter.acquire();
addItemsToDynamoTable(table, item);
}
}
protected void addItemsToDynamoTable(Table table, Item item) {
try {
table.putItem(item);
} catch (RuntimeException e) {
logger.fatal("dynamoDB table.putItem threw exception for:" + tableName, e);
throw e;
}
}
Спасибо за помощь. Я также добавление фактического «исправленный/рабочий» код, который я использовал:
@Before
public void setup() {
dynamoDbWriter = spy(DynamoDBWriter....);
doNothing().when(dynamoDbWriter).addItemsToDynamoTable(any(), any());
}
// Method makes sure that irrespective of the throughput, all the items are added to dynamoDB
@Test
public void testAllItemsAdded() {
List<Item> items = new ArrayList<>();
for (int index = 0; index < 5; index++) {
items.add(new Item());
}
dynamoDbWriter.write(items);
verify(dynamoDbWriter, times(5)).addItemsToDynamoTable(any(), any());
}