【问题标题】:Can I run IntelliJ unit tests in a maven project without re-running maven goals?我可以在 maven 项目中运行 IntelliJ 单元测试而不重新运行 maven 目标吗?
【发布时间】:2020-05-01 18:30:37
【问题描述】:

我有一个具有深度 maven 结构的项目,并且正在评估从 Eclipse 切换到 IntelliJ。

我已导入顶级 pom.xml。我知道我可以:

  1. 使用 maven 目标构建整个项目(我使用“test-compile”构建测试类)
  2. 从 IntelliJ 测试运行程序运行测试。这似乎从项目的目标文件夹中找到了 classes/test-classes。

但是,我只想更改测试或被测代码,保存并重新运行它,而无需再次手动运行 maven 测试编译(就像我可以使用 Eclipse 一样)。 IntelliJ 可以做到这一点吗?

我认为问题在于 IntelliJ 的“构建项目”操作没有将测试类(和其他类)构建到测试运行程序查看的目标文件夹中。

【问题讨论】:

  • 首先您应该将整个项目导入 IntelliJ 或 Eclipse。在 IDE(Eclipse/IntelliJ)中更改代码后,您可以简单地重新运行测试(通过单击测试),否则会出现问题……除此之外,您的构建是否在普通命令行上运行良好?
  • 我已将整个项目导入 IntelliJ。重新运行测试似乎会以上次内置到目标/测试类时的状态运行测试。事实上,如果我重建项目,它会清除目标中的所有 .class 文件,并再次尝试运行测试报告“找不到类”。
  • 确实出了点问题...顺便说一句:您使用哪个 IDEA 版本?

标签: maven intellij-idea junit


【解决方案1】:

如果您在 IntelliJ IDEA 中导入 Maven 项目,您将能够从 IDE 而不是 Maven 构建和运行测试,由于增量编译,Maven 速度更快。

确保 this option is disabled 并使用 JUnit 运行/调试配置,不要运行 maven 目标。

【讨论】:

  • 我确实禁用了该选项,并且正在使用 IntelliJ 运行/调试。我真的觉得问题在于测试运行器只在 /target 中寻找测试类,而 IntelliJ 构建将它们放在其他地方。
  • 测试运行器应该使用类路径而不是硬编码目录。 IntelliJ IDEA 输出不与 Maven 共享,这是设计使然,但它不应影响不依赖输出目录位置的正确编写的应用程序和测试。
  • 好的...有什么我可以调试的,看看为什么这没有发生?
  • 如果从 IDE 启动,请在测试的命令行中查看类路径。它是否包含输出目录?这些输出目录是否具有所需的 .class 文件和资源?使用 Build | 之后这些类是否出现在这些输出目录中?建造?您的测试中是否有任何配置明确引用 target 目录?如果您想在这里获得帮助,我们将不胜感激Minimal, Complete, and Verifiable example
【解决方案2】:

感谢@CrazyCoder 的建议,我能够按照以下步骤完成这项工作,因为我认为问题是 Eclipse 工件与 IntelliJ 工件发生冲突:

  1. 从整个代码树中删除所有 .classpath、.project 和 .iml 文件
  2. 从根目录中删除 .idea - 我们需要重新开始
  3. 在 IntelliJ 中打开顶层 pom.xml
  4. 如果需要,请执行mvn compile(由于某些生成的来源,我需要)
  5. 重建您的项目

在此之后,不要再在 Eclipse 中打开您的项目!

【讨论】:

  • 另外,有一次我最终从命令行打开 IntelliJ,并且由于某种原因它在父文件夹中打开。因此,它没有在 C:\dev\myProject 打开,而是打开了 C:\dev。这意味着创建了一个 IntelliJ 配置文件夹 C:\dev\.idea。当我在正确的位置关闭并再次打开时,它似乎可以工作,但我无法从 IDE 可靠地运行测试,因为 .iml 文件中的某些路径被弄乱了。解决方法是删除 C:\dev\.idea、C:\dev\myProject\.idea、所有 *.iml 文件,然后重新开始。
猜你喜欢
  • 2011-09-27
  • 2016-04-30
  • 2011-05-08
  • 2015-11-18
  • 2015-01-10
  • 1970-01-01
  • 2020-06-16
  • 2021-01-16
  • 2017-07-21
相关资源
最近更新 更多