【发布时间】:2011-04-15 15:58:00
【问题描述】:
有些东西告诉我我做错了什么......不应该这么难。
我有一个依赖于一些内部类的类。我正在通过受保护的方法创建该内部,以便我可以在测试中覆盖它以提供模拟。我知道要让 Mockito 模拟对象从 void 方法抛出异常,我必须使用 doThrow。
但我的问题是编译器抱怨对 Mockito.doThrow() 的调用正在抛出 RuntimeException ......所以我必须在设置模拟的方法中添加一个 throws 子句。这是 Mockito 本身的错误吗? doThrow 是在声明将来应该发生的事情,但不是在模拟设置期间发生的事情。
我的 OuterClass 看起来像...
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;
}
}
【问题讨论】:
标签: java unit-testing mockito