2013-10-20 68 views
8

我想知道为什么我需要处理异常,当我嘲笑抛出异常的无效方法时。Mockito,void检查异常的方法

例如

public class MyObject { 
    public void call() throws SomeException { 
     //do something 
     } 
} 

现在,当我这样做,

@Mock 
MyObject myObject; 

doNothing().when(myObject).call() 

它会导致编译错误说

"error: unreported exception SomeException; must be caught or declared to be thrown"

我很纳闷,为什么我需要处理异常对于本身被嘲笑的方法。

+2

你不需要处理它。只需在您的测试方法中添加'throws Exception'即可。我将所有的JUnit方法标记为抛出异常,这是习惯的问题 - 没有理由不这样做。 –

+0

@DawoodibnKareem当我想表示测试应该引发异常时,我使用断言助手,例如'@Test(expected = ...)'。我尽量避免测试方法签名中的'throws'子句,因为它没有任何关于测试本身的有用信息。 –

回答

7

当您在Java中使用Mockito模拟对象时。框架不会改变任何语言规范。在Java中,编译时定义了throws子句。您无法在运行时更改声明的异常。在你的情况下,如果你调用方法MyObject.call(),你必须像处理任何普通的Java代码一样处理SomeException

由于在单元测试中,你不想处理你没有测试的东西。在你的情况下,我只是在测试方法中重新声明throws SomeException

相关问题