JUnit测试Try / Catch异常

时间:2015-12-06 13:53:58

标签: java testing junit computer-science

我似乎无法在JUnit测试的方法中访问Exception。这是方法:

public void doUpdateStocks() {
    for (Entry<Integer, IFolioRestricted> e : folioList.entrySet()) {

        IFolioRestricted folio = e.getValue();

        for(Entry<Integer, IStockRestricted> s : folio.getStockList().entrySet()){
            try {
                ((IStock) (s.getValue())).updatePrice();
            } catch (MethodException e1) {
                e1.printStackTrace();
            }
        }
    }

这就是我测试它的方式:

    @Test
    public void testUpdateStock() {

        h.doCreateNewFolio("a");
        try {
            h.doBuyStock(0, "A", 10);
        } catch (IOException | WebsiteDataException | NoSuchTickerException | MethodException e) {
            // TODO Auto-generated catch block
        }
        h.doUpdateStocks();
    }

在网上看了之后我看到了(期望= MethodException.class),但它似乎不起作用。任何有关如何覆盖catch的任何想法(MethodException e1){e1.printStackTrace();在JUnit中?

2 个答案:

答案 0 :(得分:2)

首先,您需要抛出异常才能在JUnit测试中捕获它:

public void doUpdateStocks() throws MethodException { // throw the exception
    for (Entry<Integer, IFolioRestricted> e : folioList.entrySet()) {

    IFolioRestricted folio = e.getValue();

    for(Entry<Integer, IStockRestricted> s : folio.getStockList().entrySet()){
       ((IStock) (s.getValue())).updatePrice();           
    }
}

您的代码应该比已经完成,但是如果没有抛出异常,您将不得不通过测试:

try {
    h.doBuyStock(0, "A", 10);
    // No exception thrown, thats wrong so fail the test
    Assert.fail()
} catch (IOException | WebsiteDataException | NoSuchTickerException | MethodException e) {
    // This is where you want to end
}

答案 1 :(得分:1)

除了抛出异常(你肯定要做)之外,还有一种更好的方法来处理使用https://github.com/Codearte/catch-exception的单元测试的异常

查看github上的示例。