我有运行良好的 JUnit 测试。在我的构建中添加了 Mockito,我尝试在我的 JUnit 测试中放置一个断点,该测试使用 Mockito 来模拟一些公共方法。当我尝试在类上运行调试器时,我收到错误“由于缺少行号属性而无法在 XXX 中安装断点。修改编译器选项以生成行号属性。” 我检查了我的编译器并选择了生成行号。
6 回答
您看到的异常是由于尝试调试由mock()函数创建的动态生成的空模拟方法引起的。从您的问题来看,您似乎实际上想要使用部分模拟而不是完整模拟,其中只有一些方法被模拟,其余调用被委托给真正的实现。
要创建部分模拟,您应该使用spy()方法而不是mock()方法。所以,使用
MyClass myMock = spy(new MyClass());
代替
MyClass myMock = mock(MyClass.class);
尝试删除并重新添加断点,可能只是当前断点引用了旧版本的类。只是!
也许Mockito 组中的这篇文章可以帮助你。
我有相同的消息(Eclipse Luna)。
尽管有大量错误消息,但如果调试器命中您的断点,调试仍然有效。您只需在所有这些上单击“确定”,或禁用这些消息。
我认为问题源于在扩展类上放置断点(mockito 可能正在动态扩展模拟类)并且 Eclipse 无法追踪源代码。
如果它仅在您使用 Mockito 时发生,那么可能是因为 Mockito 是在没有调试器支持的情况下编译的?
此外,请检查您的测试类的编译器设置是否与常规代码相同。
当您在模拟方法中放置断点时发生
除了这个问题很老外,我今天也遇到了同样的问题,解决方案很简单,但花了一些时间才弄清楚。因此,这可能对在这里绊倒的人有所帮助。
我刚刚设置了一些旧断点,其中一个指向了一些更改的代码,因此记录的断点位置不再好。
我的建议是尝试删除所有有问题的断点并在当前代码上重新安装它们。在干净的构建之后,只是为了确保指向最新的二进制文件。:)