仅在 Intellij 调试器中检测到 Mockito 未完成的存根异常
Mockito unfinished stubbing exception detected ONLY in Intellij Debugger
仅当我尝试通过 IntelliJ 调试器调试测试时才会出现此问题。当我只是简单地 运行 测试时,它不会发生。
CustomerChoiceRepository 是一个普通的 Spring 引导 JPA 存储库,这里使用 @Mock
进行模拟。
当此行在调试器中执行时,我在变量的监视部分收到以下错误:
整个错误信息是:
Method threw 'org.mockito.exceptions.misusing.UnfinishedStubbingException' exception. Cannot evaluate com.item.repository.jpa.CustomerChoiceRepository$MockitoMock18657964.toString()
同样,这仅在 IntelliJ 调试器中检测到,因此测试失败仅 在我调试它时。
所以我的问题是:这里发生了什么?
这是一个错误吗?这是我无法理解的东西,因为我不太了解 Mockito 的内部结构吗?
您的 IntelliJ 在存根期间在 mock 上调用 toString,这会导致异常。
检查调试器设置
默认情况下,IntelliJ 在调试器 window 中的对象上调用 toString
,但仅在覆盖该方法的对象上调用。此行为是可自定义的,目前在 Preferences -> Build Tools -> Debugger -> Data Views -> Java -> Enable 'toString' object view
中,但 IDE 版本之间的设置可能不同。
参见:
- Is it possible to tell IntelliJ IDEA to automatically invoke toString() on the objects inspected in watches, variables, tool tip windows?
在存根期间不要调用模拟对象的方法
参见:
- How do Mockito matchers work?
- How does mockito when() invocation work?
仅当我尝试通过 IntelliJ 调试器调试测试时才会出现此问题。当我只是简单地 运行 测试时,它不会发生。
CustomerChoiceRepository 是一个普通的 Spring 引导 JPA 存储库,这里使用 @Mock
进行模拟。
当此行在调试器中执行时,我在变量的监视部分收到以下错误:
整个错误信息是:
Method threw 'org.mockito.exceptions.misusing.UnfinishedStubbingException' exception. Cannot evaluate com.item.repository.jpa.CustomerChoiceRepository$MockitoMock18657964.toString()
同样,这仅在 IntelliJ 调试器中检测到,因此测试失败仅 在我调试它时。
所以我的问题是:这里发生了什么?
这是一个错误吗?这是我无法理解的东西,因为我不太了解 Mockito 的内部结构吗?
您的 IntelliJ 在存根期间在 mock 上调用 toString,这会导致异常。
检查调试器设置
默认情况下,IntelliJ 在调试器 window 中的对象上调用 toString
,但仅在覆盖该方法的对象上调用。此行为是可自定义的,目前在 Preferences -> Build Tools -> Debugger -> Data Views -> Java -> Enable 'toString' object view
中,但 IDE 版本之间的设置可能不同。
参见:
- Is it possible to tell IntelliJ IDEA to automatically invoke toString() on the objects inspected in watches, variables, tool tip windows?
在存根期间不要调用模拟对象的方法
参见:
- How do Mockito matchers work?
- How does mockito when() invocation work?