在Eclipse中从Maven项目调试Junit测试

时间:2018-09-30 14:10:52

标签: eclipse maven junit

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

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

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

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

3 个答案:

答案 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>  

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

  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 :(得分:0)

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