在 Eclipse 中调试来自 Maven 项目的 Junit 测试



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

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

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

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

默认情况下,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 源代码,并且它停止在您自己的项目源代码中设置的断点处,这就可以很好地工作!

这里有两种主要方法。

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

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

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

相关内容

最新更新