仅在 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?