如何在JUnit测试中强制mockit抛出RemoteException



这是我想强制抛出远程异常的代码:

transient Bicycle b=null;
public Bicycle getBicycle() {
    if(b==null) {
        try {
            b=new Bicycle(this);
        } catch (RemoteException ex) {
            Logger.getLogger(Bicycle()).log(Level.SEVERE, null, ex);
        }
    }
    return b;
}

下面是我用Mockito运行的JUnit测试:

boolean exceptionThrown=false;
Bicycle mockB = mock(Bicycle);
mockB.setBicycle(null);
stub(mockB.getBicycle()).toThrow(new RemoteException(){boolean exceptionThrown = true;});
assertTrue(exceptionThrown);

我一直收到以下错误:

Checked exception is invalid for this method!

任何帮助都将不胜感激。

编辑:

不是

stub(mockB.getBicycle()).toThrow(new RemoteException(){boolean exceptionThrown = true;});

我也试过

doThrow(new RemoteException(){boolean exceptionThrown = true;}).when(mockB).getBicycle();

Mockito.when(mockB.getBicycle()).thenThrow(new RemoteException(){boolean exceptionThrown=true;});

还是没有运气

Edit2 -在完全理解API并正确使用它之后更进一步:

when(mockB.getBicycle()).thenThrow(new RuntimeException());

我现在不知道怎么做断言。我试着在异常被调用时放一个布尔值,但是assert看不到布尔值。

任何想法?

getBicycle()方法永远不会返回RuntimeException。代码本身正在捕获RuntimeException,并在捕获时将其写入日志记录器。方法本身要么返回Bicycle,要么返回null。

你需要重新考虑getBicycle方法的操作方式。如果您想让RuntimeException冒泡通过,它可以在日志记录之后重新抛出RuntimeException。但是,根据编写的方式,RuntmeException永远不会出现在JUnit测试

相关内容

  • 没有找到相关文章

最新更新