【问题标题】:Debugging Junit tests from Maven project in Eclipse在 Eclipse 中从 Maven 项目调试 Junit 测试
【发布时间】:2019-03-05 19:51:53
【问题描述】:

我有一个由多个 Maven 项目组成的项目,其中测试位于单独的模块中。例如:

com.xyz.abc.feature.model
com.xyz.abc.feature.model.test

这些测试是 JUnit 测试,我一直使用 mvn install 从命令行运行它们。我想单步执行特定测试中的代码,因此我已将该项目作为 Maven 项目导入 Eclipse。我尝试在单元测试中放置一个断点,Eclipse 在执行mvn install 目标时不会停止。

在这种情况下如何调试特定测试?

【问题讨论】:

  • 第一个问题是模块分离。单元测试属于它们相应的模块,这意味着您在src/main/java/PACKAGE 中有生产代码,在src/test/java/PACKAGE 中有相应的单元测试。这些测试将由 maven-surefire-plugin 运行,或者您可以简单地从 Eclipse 启动它们,而无需在命令行上执行 mvn install...
  • 改变测试的结构不是这里的选择。
  • 为什么不呢?以这种方式拥有它们是惯例。所以问题是你为什么不遵守约定?是什么原因?

标签: eclipse maven junit


【解决方案1】:

Maven SureFire 插件默认在不同的进程中运行测试。这可能就是它对你不起作用的原因。您首先通过将其添加到您的 pom.xml 来禁用分叉:

    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-surefire-plugin</artifactId>
                <configuration>
                    <forkMode>never</forkMode>
                </configuration>
            </plugin>
        </plugins>
    </build>  

然后按照以下步骤进行调试:

  1. 使用调试模式启动测试:

转到您的 pom.xml 所在的文件夹。假设您要调试到“安装”阶段,该阶段也涵盖了您的测试。运行此命令

mvnDebug install

这将启动一个进程并在默认端口 8000 上等待(您的端口可能不同,请检查您的输出显示)。我的测试显示了这个输出:

Listening for transport dt_socket at address: 8000

  1. 在 Eclipse 中使用远程调试器连接到步骤 1 中启动的进程:

如果您还没有在 Eclipse 中设置(或导入)项目,则转到菜单“运行”->“调试配置”->“远程 Java 应用程序”,并创建一个新的启动配置。确保端口号与步骤 1 的输出中显示的端口号匹配。单击“调试”。这会将 Eclipse 调试器连接到您在步骤 1 中启动的进程。如果您在 Eclipse 源代码编辑器中设置了断点,那么它将停在那里。

有些人会说,这样做,你真的是在调试 Maven。我对其进行了测试,这种方法效果很好。只要您的 Eclipse 项目中没有 Maven 源代码,并且它会在您自己的项目源代码中设置的断点处停止,那就太好了!

【讨论】:

    【解决方案2】:

    这里有两种主要方法。

    首先,您可以从 Eclipse 中执行测试并像调试任何其他 Java 程序一样对其进行调试。这可能是最简单的方法,但如果 Maven 执行和 Eclipse 中的执行之间存在差异(例如,环境变量、测试顺序等),则可能不够准确。

    第二种方法是运行mvnDebug 而不是mvn,这基本上是mvn 并打开远程调试端口。您可以启动构建,将 Eclipse 连接到远程调试端口并从那里进行调试。

    【讨论】:

    • 第二部分将调试 Maven 本身,我认为原始帖子不会真正做到......
    • @khmarbaise 使用mvnDebug 将允许您调试该进程中的任何Java 代码。如果您在测试代码中放置断点,您将调试测试。
    • 这假设您只有一个无法预测的进程。如果您已将surefire/failsafe 配置为fork,这将无法正常工作。部分原因是过度设计导致调试测试可以从IDE 中完成...简单得多。
    • @Mureinik,你能补充一些细节吗?我对 Eclipse 不熟悉,因此我希望了解有关要遵循的步骤的更多详细信息。
    【解决方案3】:

    只需在eclipse中打开测试,双击测试名称将其选中(实际上只需单击测试名称将光标放在其中就足够了,或者您可以例如在大纲视图中选择它) ,然后右键单击并选择Debug As > JUnit Test

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-04
      • 2013-12-04
      • 1970-01-01
      • 2014-03-13
      • 2020-04-11
      • 1970-01-01
      相关资源
      最近更新 更多