【问题标题】:Debugger doesn't stop at break points (Arquillian, TomEE, OpenJPA Enhancer, Maven, JUnit, and IntelliJ)调试器不会在断点处停止(Arquillian、TomEE、OpenJPA Enhancer、Maven、JUnit 和 IntelliJ)
【发布时间】:2023-11-15 17:33:01
【问题描述】:

我正在编写一个使用 JAX-RS (Apache CXF) 和 JPA (Apache OpenJPA) 并使用 TomEE+ 部署的 Web 应用程序。我已经开始通过 arquillian-tomee-embedded maven 依赖项使用 Arquillian 来对我的 REST 服务进行单元测试。

当我使用 IntelliJ 启动 Maven 构建生命周期的测试阶段时,一切正常。它在我的 JPA 实体上运行 OpenJPA 的增强器,启动单元测试,并且我能够成功调用我的 Web 服务并且它们能够成功访问数据库。

不幸的是,如果我在调试模式下启动测试阶段,一切仍然有效,但我的断点都没有命中。我必须做些什么来纠正这个问题?

我找到了一个乏味的解决方法。我可以右键单击每个单元测试并在调试模式下运行,调试器会遇到断点……但我必须事先手动运行 OpenJPA 增强器才能使 JPA 代码工作。

【问题讨论】:

  • 什么意思是“在调试模式下启动测试阶段”? maven的命令行是什么?如果你的意思是“-X”,那么它意味着 Maven 在调试模式下运行,而不是它调试你的应用程序。
  • 我没有通过命令行使用 Maven。我通过 IntelliJ IDEA 使用 Maven。我右键单击 maven 生命周期的测试阶段,然后单击 Debug 菜单项。

标签: maven intellij-idea junit openjpa apache-tomee


【解决方案1】:

当您“在调试模式下启动测试阶段”时,这意味着 Maven 在调试模式下运行,而不是在调试您的应用。您不能通过 Maven 调试您的应用程序。 Maven 使用 surefire-plugin 运行测试,你不能使用断点和调试。

【讨论】:

  • 感谢您的回答,我刚开始使用 IntelliJ 和 Maven。为了解决我的问题,我使用 IntelliJ 创建了一个 JUnit 运行/调试配置,并将 openjpa:enhance 目标添加到“启动前”列表中。现在我可以运行我的测试,而无需我之前描述的繁琐的手动过程。谢谢!
  • @EdLaFave 伙计,你救了我的理智!我正在使用 Idea 14 CE,我可以看到在调试中启动 Maven 'test' 已连接到 VM/socket,但没有断点操作!!!按照您的建议,我创建了一个 JUnit 配置,事先进行了 Maven“编译”,这很有效,谢谢!
【解决方案2】:

有两种可能: 1) 代码/断点不可到达/没有被当前上下文调用。 2) 您没有在调试模式下运行应用程序。

确保您正在调试应用程序,而不是像“运行方式...”那样运行它

考虑到您使用的是 Eclipse,运行 -> 调试为 ->

还要确保无论您在哪里添加断点,这些行都可以到达。

【讨论】:

  • 我在单元测试的第一行有一个断点,当我使用我描述的解决方法时它会命中,所以我不担心可达性。我也确信当我启动 Maven 测试阶段时,它是使用调试模式完成的。我使用 IntelliJ 右上角的调试图标启动它并启动调试窗口。
  • 好的。那条线是什么。
  • 你好,那么请添加log / print语句并在其上添加断点,然后您将知道您的测试用例是否正在执行。
【解决方案3】:

我之前遇到过 IntelliJ 调试没有遇到断点的问题。您可能很幸运禁用了 JUnit 插件并重新启动了 IDEA。

【讨论】:

    最近更新 更多