我有单元测试,用于测试方法是否抛出错误。
@Test
public void getStockPriceWithNetworkErrorThrowsException()
{
StockPriceFetcher stockPriceFetcherWithNetworkError = Mockito.mock(StockPriceFetcher.class);
when(stockPriceFetcherWithNetworkError.getPrice("YHOO"))
.thenThrow(new ConnectException("Network error"));
assetValue = new AssetValue(stockPriceFetcherWithNetworkError);
try
{
assetValue.getStockPrice("YHOO");
fail("Expected exception for network error.");
}
catch(ConnectException e){
assertEquals(e.getMessage(), "Network error");
}
}
getPrice
是接口stockPriceFetcher
中的方法,而getStockPrice
只是返回getPrice()
返回的内容。我希望抛出ConnectException
,但是在catch块中有一个错误,因为ConnectException
从未在try块中抛出。无论如何,我可以使此try块抛出
ConnectException
吗? 最佳答案
解决此问题的最简单方法是替换以下行:
when(stockPriceFetcherWithNetworkError.getPrice(“ YHOO”))
与行:
when(stockPriceFetcherWithNetworkError.getStockPrice(“ YHOO”))
但是请确保getStockPrice()包含try {} catch(ConnectException e){}块。
似乎您没有在getStockPrice()方法中抛出ConnectException。
getStockPrice(String str) {
getPrice(str) {
// Here the ConnectException is thrown
}
// here should appear another catch that throws the error to the upper level
}
如果没有getStockPrice()方法中的try {} catch {}块,则无法在调用该方法的任何位置捕获异常。
这就是为什么您还应该对getStockPrice()实现一个Mock。
当您添加try {} catch(ConnectException e){}块时,它将很好用。