Java 无法在Eclipse中调试Mockito/JUnit代码,只需JUnit即可

Java 无法在Eclipse中调试Mockito/JUnit代码,只需JUnit即可,java,eclipse,debugging,mockito,Java,Eclipse,Debugging,Mockito,我有运行良好的JUnit测试。将Mockito添加到我的构建中,我尝试在JUnit测试中设置一个断点,使用Mockito模拟一些公共方法。当我尝试在类上运行调试器时,出现错误“由于缺少行号属性,无法在XXX中安装断点。请修改编译器选项以生成行号属性”。我检查了我的编译器,并选择了“生成行号” 如果这只发生在您使用Mockito时,那么可能是因为Mockito是在没有调试器支持的情况下编译的 另外,检查测试类的编译器设置是否与常规代码相同。尝试删除并重新添加断点,可能只是当前断点引用了类的旧版本。

我有运行良好的JUnit测试。将Mockito添加到我的构建中,我尝试在JUnit测试中设置一个断点,使用Mockito模拟一些公共方法。当我尝试在类上运行调试器时,出现错误“由于缺少行号属性,无法在XXX中安装断点。请修改编译器选项以生成行号属性”。我检查了我的编译器,并选择了“生成行号”

如果这只发生在您使用Mockito时,那么可能是因为Mockito是在没有调试器支持的情况下编译的


另外,检查测试类的编译器设置是否与常规代码相同。

尝试删除并重新添加断点,可能只是当前断点引用了类的旧版本。就那样

也许我能帮你。

我也有同样的消息(Eclipse Luna)

尽管有大量错误消息,但如果调试器命中您的断点,调试仍在工作。您只需在所有邮件上单击“确定”,或禁用这些邮件


我认为问题源于在扩展类上放置断点(mockito可能是动态扩展模拟类)和Eclipse无法跟踪源代码。

除了这个问题很老之外,我今天也遇到了同样的问题,解决方案非常简单,但花了一些时间才解决。 因此,这可能对那些在这里绊倒的人有所帮助

我刚刚设置了一些旧的断点,其中一个指向一些更改的代码,因此记录的断点位置不再好


我的建议是尝试删除所有有问题的断点,并在当前代码上重新安装它们。在一个干净的构建之后,只需确保指向最新的二进制文件即可。:)

您看到的异常是由于尝试调试mock()函数创建的动态生成的空mock方法引起的。从您的问题来看,看起来您实际上希望使用部分模拟而不是完全模拟,其中只模拟一些方法,其余的调用委托给实际实现

要创建部分模拟,应该使用spy()方法而不是mock()方法。 所以,使用

而不是

 MyClass myMock = mock(MyClass.class);

当您在模拟方法中放置断点时会发生这种情况

您使用的是什么版本的Mockito?我必须添加一个
org.Mockito.plugins.MockMaker
来模拟最终类,这不允许我调试源代码。我想@albert-t-wong是说动态(生成的)模拟代码没有调试信息,不,他不能调试Mockito的源代码。
 MyClass myMock = mock(MyClass.class);