gpt4 book ai didi

java - 从 Mockito 模拟中抛出异常

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:17:05 25 4
gpt4 key购买 nike

有些东西告诉我我做错了什么......不应该这么难。

我有一个类依赖于一些内部类。我正在通过 protected 方法创建该内部结构,以便我可以在测试中覆盖它以提供模拟。我知道要让 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;
}
}

最佳答案

请检查编译器是否真的在提示 RuntimeException

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

关于java - 从 Mockito 模拟中抛出异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5679382/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com