我有单元测试,用于测试方法是否抛出错误。

@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){}块时,它将很好用。

09-05 00:05