【问题标题】:Cannot debug Mockito / JUnit code in Eclipse, works fine with just JUnit无法在 Eclipse 中调试 Mockito / JUnit 代码,仅适用于 JUnit
【发布时间】:2011-03-10 10:42:25
【问题描述】:

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

【问题讨论】:

  • 你使用的是什么版本的 Mockito?
  • 我必须添加一个org.mockito.plugins.MockMaker 来模拟最终类,这不允许我调试源代码。

标签: java eclipse debugging mockito


【解决方案1】:

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

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

【讨论】:

  • 我认为@albert-t-wong 是在说动态(生成的)模拟代码没有调试信息,不是说他无法调试 Mockito 的源代码。
【解决方案2】:

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

也许this post in the Mockito group可以帮到你。

【讨论】:

    【解决方案3】:

    我有相同的消息(Eclipse Luna)。

    尽管有大量错误消息,但如果调试器遇到断点,调试仍然可以工作。您只需在所有这些消息上单击“确定”,或禁用这些消息。

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

    【讨论】:

      【解决方案4】:

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

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

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

      【讨论】:

        【解决方案5】:

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

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

        MyClass myMock = spy(new MyClass());
        

        而不是

         MyClass myMock = mock(MyClass.class);
        

        【讨论】:

          【解决方案6】:

          在模拟方法中放置断点时发生

          【讨论】:

            猜你喜欢
            • 2012-08-25
            • 2020-10-06
            • 2019-12-23
            • 2018-12-26
            • 2020-03-22
            • 1970-01-01
            • 2010-09-30
            • 1970-01-01
            • 2020-01-18
            相关资源
            最近更新 更多