我有一个由多个Maven项目组成的项目,其中的测试位于单独的模块中。例如:
com.xyz.abc.feature.model
com.xyz.abc.feature.model.test
这些测试是JUnit测试,我一直在使用mvn install
从命令行运行它们。我想在特定的测试中逐步执行代码,因此我已经将该项目作为Maven项目导入了Eclipse。我尝试在单元测试中放置一个断点,当执行mvn install
目标时,Eclipse不会停止。
在这种情况下如何调试特定的测试?
答案 0 :(得分:1)
这里有两种主要方法。
首先,您可以像从调试其他Java程序一样从Eclipse执行测试并对其进行调试。这可能是最简单的方法,但是如果Maven执行与Eclipse中的执行之间存在差异(例如,环境变量,测试顺序等),则可能不够准确。
第二种方法是运行mvnDebug
而不是mvn
,这在打开远程调试端口的情况下必不可少mvn
。您可以启动构建,将Eclipse连接到远程调试端口,然后从那里进行调试。
答案 1 :(得分: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>
然后按照以下步骤进行调试:
转到pom.xml所在的文件夹。假设您要调试到“安装”阶段,该阶段也涵盖了您的测试。运行此命令
mvnDebug install
这将启动进程并在默认端口8000上等待(您的端口可能不同,请检查输出显示)。我的测试显示以下输出:
Listening for transport dt_socket at address: 8000
如果尚未在Eclipse中设置(或导入)项目,请转到菜单“运行”->“调试配置”->“远程Java应用程序”,并创建一个新的启动配置。确保端口号与步骤1的输出中显示的端口号匹配。单击“调试”。这会将Eclipse调试器连接到您在步骤1中启动的过程。如果您在Eclipse源代码编辑器中设置了断点,那么它将在此停止。
有人会说,这样做确实是在调试Maven。我测试了一下,这种方法很好用。只要您在Eclipse项目中没有Maven源代码,并且它停止在您自己的项目源代码中设置的断点处,就可以很好地工作!
答案 2 :(得分:0)
只需在eclipse中打开测试,双击测试名称即可将其选中(实际上,只需单击测试名称即可将光标放在其中,或者您可以在大纲视图中将其选中) ,然后右键单击并选择Debug As
> JUnit Test