У меня есть единичный тест, который позволит мне проходить через объект Collection, содержащий список транспортных средств. На каждой итерации я хочу проверить, является ли автомобиль примером автомобиля. Так что мой код выглядит как это:Единичное тестирование Коллекция в Java
public class VehicleChecker {
protected boolean checkVehicles(Garage garage) {
for (Vehicle vehicle : garage.getVehicles() {
if (vehicle instanceof Automobile) return true;
}
}
}
Так я написал код соответственно:
@Mock private Garage mockGarage;
@Mock private VehicleCollection mockVehicleCollection;
@Mock private VehicleCollectionIterator mockVehicleCollectionIterator;
@Mock private Vehicle mockVehicle;
@Test
public void testCheckVehicles() {
VehicleChecker testObject = new vehicleChecker();
when(mockGarage.getVehicles()).thenReturn(mockVehicleCollection);
when(mockVehicleCollection.iterator()).thenReturn(mockVehicleCollectionIterator);
when(mockVehicleCollectionIterator.hasNext()).thenReturn(true).thenReturn(false);
when(mockVehicleCollectionIterator.next()).thenReturn(mockVehicle);
boolean result = testObject.checkVehicles(mockGarage);
verify(mockGarage).getVehicles();
}
Проблема возникает с проверки заявления. Основываясь на том, как это было написано, тест должен пройти. Однако, когда я просматриваю код, я код полностью пропускает цикл for. Почему это? Есть ли разница в том, как одна итерация выполняется через коллекцию, а не ArrayList? Если да, то как я правильно издеваюсь над этим взаимодействием?
Два вопроса: почему вы вручную проверяете тип? Это обычно плохой дизайн. И зачем издеваться над коллекцией, а не просто кормить ее реальной? – chrylis
Я борюсь с конкретной версией этого кода, который не имеет типа возврата и не принимает аргументов. Это включает сборник. Лучшее, что я могу сделать, - издеваться над сборкой по прокси. Достаточно сказать, что я не могу накормить фактический объект Collection. –
Просто попробовал все, работает, как ожидалось, в том смысле, что тест терпит неудачу, потому что вы издеваетесь над «Автомобилем», а не «Автомобилем». Хорошо, два небольших опечатка, но ничего, что IDE не будет выделять. Так странно, если это не работает для вас. –