【问题标题】:I couldn't understand the logic of willThrow, doThrow in junit mockito testing我无法理解junit mockito测试中willThrow、doThrow的逻辑
【发布时间】:2021-04-15 18:39:01
【问题描述】:

我有这段简单的代码,但看不懂它的逻辑和含义。

void findByIdThrows(){
    given(addressRepository.findById(1)).willThrow(new RuntimeException("boom iii"));

    assertThrows(RuntimeException.class, () -> servic.findById(1));

    then(addressRepository).should().findById(1);
}

这是否意味着:如果您在查找 id #1 的地址期间遇到 RuntimeException,那么断言我将给出 RuntimeException?

最后一行(然后....)究竟做了什么?

【问题讨论】:

  • 我建议阅读bdd-mockito 上的教程,例如this one on Baeldung.
  • 我看到了链接。这是一个有用的参考。感谢分享。

标签: java spring spring-boot testing junit


【解决方案1】:

第一行:

定义调用addressRepository.findById(1) 将抛出RuntimeException

第二行:

检查servic.findById(1) 是否抛出RuntimeException

第 3 行:

相当于:

 verify(addressRepository).findById(1)

并检查是否调用了addressRepository.findById(1)

【讨论】:

  • 我在第一行调用了 addressRepository.findById(1)。为什么要再次验证该方法的调用?
  • 因为第一行只是设置了mock,所以if调用发生了,那么就会抛出异常。第三行检查调用是否真的发生了。
  • 你没有在第一行调用 addressRepository.findById(1) - 你对 Mokito 说,当测试过程中的某个地方会被调用 addressRepository.findById(1) 然后它会抛出异常
  • 感谢 dawood-ibn-kareem 和 Даниил Дмитроченков。现在这些台词对我来说很有意义。
  • 当我在第一行将 id 编号从 1 更改为 2 时,我希望测试失败但测试通过且没有错误。为什么会这样?我用 id #1 模拟了它。
猜你喜欢
  • 2021-06-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-01-30
  • 1970-01-01
  • 1970-01-01
  • 2022-01-23
  • 2014-10-20
相关资源
最近更新 更多