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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了从Eclipse中的Maven项目调试Junit测试相关的知识,希望对你有一定的参考价值。

我有一个由几个Maven项目组成的项目,其中测试是分开的模块。例如:

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

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

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

答案

这里有两种主要方法。

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

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

另一答案

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

以上是关于从Eclipse中的Maven项目调试Junit测试的主要内容,如果未能解决你的问题,请参考以下文章

Eclipse 2018-09与jdk11声称包org.junit缺失,即使它包含在maven中

Eclipse开发Maven项目提示:程序包org.junit不存在解决方案

Java web项目

Eclipse/Maven:运行 JUnit 测试时未编译它们

Eclipse / Maven:JUnit测试在运行时未编译

在 Maven 中从 JDK 1.6 升级到 JDK 1.8 时 JUnit 失败,但它在 eclipse 中工作