gpt4 book ai didi

java - 为什么 Mockito.when(...).thenThrow(...) 直接抛出错误

转载 作者:行者123 更新时间:2023-11-29 04:17:28 25 4
gpt4 key购买 nike

我有以下代码:

@Mock
private B b;

@InjectMocks
private A a;

@Test(expected = IOException.class)
public void test() {
when(b.doSomething())
.thenThrow(IOException.class);

a.doSomethingWithB();
}

public class A {
private B b;

@Autowired
public a(B b) {
this.b = b
}

public boolean doSomethingWithB() {
b.doSomething();
}
}

实际上,这个测试没有正常工作,当我调试它时,thenThrow 行返回 IOException,事实上,它永远不会继续 a。 doSomethingWithB().

我的 Mockito 版本是 2.19.1。

感谢您的回答。

最佳答案

B#doSomething() 方法不能抛出 IOException,因为它不是其签名的一部分。这就是 Mockito 不允许您执行 thenThrow(IOException.class) 的原因。

如果您查看失败测试的堆栈跟踪,您可以看到这一点:

java.lang.Exception: Unexpected exception, expected<java.io.IOException> but was<org.mockito.exceptions.base.MockitoException>

at org.junit.internal.runners.statements.ExpectException.evaluate(ExpectException.java:28)
at org.mockito.internal.junit.JUnitRule$1.evaluateSafely(JUnitRule.java:52)
at org.mockito.internal.junit.JUnitRule$1.evaluate(JUnitRule.java:43)
at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325)
....
Caused by: org.mockito.exceptions.base.MockitoException:
Checked exception is invalid for this method!

关于java - 为什么 Mockito.when(...).thenThrow(...) 直接抛出错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51436664/

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