在junit mockito测试中看不懂willThrow、doThrow的逻辑

I couldn't understand the logic of willThrow, doThrow in junit mockito testing

我有这段简单的代码,但无法理解它的逻辑和含义。

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?

最后一行 (then...) 到底做了什么?

第 1 行:

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

第 2 行:

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

第 3 行:

相当于:

 verify(addressRepository).findById(1)

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