我似乎无法在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中?
答案 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上的示例。