В школьных целях я создаю приложение, которое работает с фондовым API.
Я пытаюсь написать тест для метода, который получает все данные о запасах за последние 10 лет.Вместо того, чтобы фактически получать все эти данные, я хочу вызвать исключение.
Метод, который я хочу проверить:
@Override
public List<StockData> getAllTeslaStockData() throws AlphaVantageException {
List<StockData> stockData;
AlphaVantageConnector apiConnector = new AlphaVantageConnector(APIKEY, TIMEOUT);
TimeSeries stockTimeSeries = new TimeSeries(apiConnector);
try {
Daily responseDaily = stockTimeSeries.daily("TSLA", OutputSize.FULL);
stockData = responseDaily.getStockData();
} catch (AlphaVantageException e) {
LOGGER.log(Level.SEVERE, "something went wrong: ", e);
throw e;
}
return stockData;
}
Вызов stockTimeSeries.daily (....) может вызватьAlphaVantageException.
Я смоделировал класс TimeSeries следующим образом:
TimeSeries stockTimeSeries = mock(TimeSeries.class);
В моем тестовом классе я хочу смоделировать этот вызов и вернуть исключение вместо фактических данных.
when(stockTimeSeries.daily("TSLA", OutputSize.FULL)).thenThrow(new AlphaVantageException("No stock data available"));
Независимо от того, как я пытаюсь высмеивать этот фрагмент кода, он никогда не выдаст исключение.Он всегда будет просто выполнять код и возвращать действительные данные о запасах, вместо того, чтобы выдавать исключение, как я пытался это сделать.
Как я могу высмеять этот бит кода, чтобы он выдал исключениеожидая моих испытаний.
Классы AlphaVantageConnector, TimeSeries и Daily являются частью библиотеки, используемой для доступа к стандартному API, поэтому я не могу изменить эти классы.
Я использую JUnit 4.12 и Mockito, чтобы попробовать идостичь этого.