Мне нужно протестировать некоторый старый код, в котором используется одноэлементный вызов метода. Целью теста является обеспечение того, чтобы тест clas sunder вызывал метод одиночных чисел. Я видел похожие вопросы по SO, но все ответы требуют других зависимостей (разные тестовые рамки). К сожалению, я ограничена использованием Mockito и JUnit, но это должно быть вполне возможно с такой популярной структурой.Mocking a singleton with mockito
Одноэлементные:
public class FormatterService {
private static FormatterService INSTANCE;
private FormatterService() {
}
public static FormatterService getInstance() {
if (INSTANCE == null) {
INSTANCE = new FormatterService();
}
return INSTANCE;
}
public String formatTachoIcon() {
return "URL";
}
}
Класса испытываемый:
public class DriverSnapshotHandler {
public String getImageURL() {
return FormatterService.getInstance().formatTachoIcon();
}
}
Тест блока:
public class TestDriverSnapshotHandler {
private FormatterService formatter;
@Before
public void setUp() {
formatter = mock(FormatterService.class);
when(FormatterService.getInstance()).thenReturn(formatter);
when(formatter.formatTachoIcon()).thenReturn("MockedURL");
}
@Test
public void testFormatterServiceIsCalled() {
DriverSnapshotHandler handler = new DriverSnapshotHandler();
handler.getImageURL();
verify(formatter, atLeastOnce()).formatTachoIcon();
}
}
Идея заключалась в том, чтобы настроить ожидаемое поведение страшных одноэлементный, так как тестируемый класс будет называть его getInstance, а затем formatTachoIcon. К сожалению, это не удается с сообщением об ошибке:
when() requires an argument which has to be 'a method call on a mock'.
Вы не можете сделать это в Mockito, не пользуясь PowerMock, если вы не реорганизовать один из ваших классов. Но я не уверен, почему ты хочешь. Вы тестируете метод только с одной строкой и без внутренней логики. Это не может потерпеть неудачу. Проведите тестирование в другом месте. –
«Целью теста является обеспечение того, чтобы тест clas sunder вызывал метод одиночных игр». Ни один хороший тестовый пример не должен иметь такого рода цели.Вместо этого постарайтесь проверить некоторые значимые бизнес-функции. Вызвать зависимость и проверить метод называется не обязательно неправильным, но это нужно делать только тогда, когда это необходимо. –