gpt4 book ai didi

java - Mockito 使用参数模拟新实例调用

转载 作者:行者123 更新时间:2023-12-02 10:29:56 25 4
gpt4 key购买 nike

出于学校目的,我正在创建一个使用库存 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。

我像这样 mock 了 TimeSeries 类:

TimeSeries stockTimeSeries = mock(TimeSeries.class);

在我的测试类中,我想模拟此调用,并返回异常而不是实际数据。

when(stockTimeSeries.daily("TSLA", OutputSize.FULL)).thenThrow(new AlphaVantageException("No stock data available"));

无论我如何尝试模拟这段代码,它都不会抛出异常。它总是只执行代码,并返回有效的股票数据,而不是像我尝试做的那样抛出异常。

我如何模拟这段代码,以便它抛出我期望的测试异常。

AlphaVantageConnector、TimeSeries 和 Daily 类是用于访问 Stock API 的库的一部分,因此我无法更改这些类。

我正在使用 JUnit 4.12 和 Mockito 来尝试实现这一目标。

最佳答案

您可以使用thenThrow()方法。下面是示例

@Test(expected = NullPointerException.class)
public void whenConfigNonVoidRetunMethodToThrowEx_thenExIsThrown() {
MyDictionary dictMock = mock(MyDictionary.class);
when(dictMock.getMeaning(anyString()))
.thenThrow(NullPointerException.class);

dictMock.getMeaning("word");

关于java - Mockito 使用参数模拟新实例调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53667893/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com