从Mockito mock抛出异常



总觉得我做错了什么…不应该这么难的。

我有一个依赖于某个内部类的类。我通过一个受保护的方法创建了这个内部,这样我就可以在测试中覆盖它来提供模拟。我明白,要获得Mockito模拟对象从void方法抛出异常,我必须使用doThrow。

但我的问题是,编译器抱怨调用Mockito.doThrow()抛出RuntimeException…因此,我必须向设置模拟的方法添加一个抛出子句。这是Mockito本身的问题吗?doThrow声明了一些应该在将来发生的事情,而不是在模拟设置期间发生的事情。

My OuterClass looks like…

public class OuterClass {
  protected InnerClass inner;
  protected void createInner() { inner = new InnerClass(); }
  protected doSomething() {
    try {
      inner.go();
    } catch (RuntimeException re) {
      throw new MyException("computer has caught fire");
    }
  }
}

我的测试代码看起来像…

@Test(expected = MyException.class)
public void testSomething() {
  OuterClass outer = new TestOuterClass();
  outer.doSomething();
}
public static class TestOuterClass extends OuterClass {
  @Override
  public void createInner() {
    InnerClass mock = Mockito.mock(InnerClass.mock);
    Mockito.doThrow(new RuntimeException("test")).when(mock).go();  // PROBLEM
    inner = mock;
  }
}

请检查编译器是否真的在抱怨RuntimeException

关于RuntimeException的事情是,它在编译时应该无关紧要。我怀疑编译器实际上是在抱怨MyException -我认为这是一个检查异常,由编译器注意到,这是由doSomething()方法抛出。您应该能够简单地将throws MyException添加到测试方法中,然后由测试运行器捕获。因为它是预期的,所以测试运行器将通过。

相关内容

  • 没有找到相关文章

最新更新