【问题标题】:Conditionally run JUnit tests from Maven从 Maven 有条件地运行 JUnit 测试
【发布时间】:2012-06-11 15:43:10
【问题描述】:

在 Maven 中,是否有某种方法可以指定 JUnit 测试仅在源代码发生更改时才运行?

例如,我看到了这条消息

[INFO] --- maven-compiler-plugin:2.3.2:testCompile (default-testCompile) @ my_project ---
[INFO] Nothing to compile - all classes are up to date

现在 - 由于没有编译任何代码(因为上次编译没有更改),我宁愿不运行任何测试。这可能吗?

【问题讨论】:

  • 请问如果没有更改代码,你为什么运行编译目标?
  • 这里发生了两件事。 1 - 我有一个包含多个配置文件的项目。每个配置文件都有不同的配置文件,它们将被打包到战争中,但是这些配置文件都没有在测试中使用(测试有自己的一组“模拟”配置文件)。因此,一旦测试通过了 1 个配置文件构建,它们将全部通过。真的没有必要为每个构建的配置文件运行测试。 2 - 我正在尝试建立一个多模块构建。每次构建运行以更改任何模块时 - 它都在运行所有测试(即使是 w/0 更改的模块)。
  • 啊,我明白了。我想可能有人认为,如果在配置签入后不应该运行测试,那么配置和代码不应该是同一个多模块构建的一部分。我知道这对你没有帮助!也许将您的构建拆分为 3. BuildA 用于代码,由源代码更改触发,并始终运行测试。 BuildB 仅用于配置。以及由 A 或 B 的构建触发的 Web 应用的 BuildC。BuildC 仅使用来自 A 和 B 的构建工件,因此不会触发编译/测试。
  • 仅供参考,如果标准插件不能满足您的要求,您可能需要覆盖 grepcode.com/file/repo1.maven.org/maven2/…
  • 您的项目设置可以在一个模块中完成。将测试分解为不同的模块,甚至可能将不同的配置文件分解为单独的模块,所有这些都可以正常工作。

标签: java maven junit


【解决方案1】:

您的项目设置应分解为单独的模块。但是,如果您不能这样做,您可以在您不希望在其中运行任何测试的配置文件中设置 maven.test.skip 属性。见more about skipping tests on the site

你在谈论一个战争项目。通常,war 项目中不应包含任何代码,而应仅包含一些配置和内容,例如 html、jsp、css 和 java 脚本以及包含 java 代码的捆绑 jar 项目。 jar 项目将包含代码。如果您进行集成测试,一个好的做法是将它们放在单独的模块中。

不同的战争配置可以在配置文件中,也可以使用 maven 战争插件的战争覆盖功能在单独的模块中。

【讨论】:

  • 我为什么要将单元测试分解为与被测试代码不同的模块?这似乎不是一个好主意。我也看不到当代码更改时这将如何自动运行测试,但在没有更改时不会运行它们。
  • 编辑了答案以澄清。
猜你喜欢
  • 2021-12-16
  • 2013-08-23
  • 2019-04-25
  • 2020-12-27
  • 2012-12-04
  • 1970-01-01
  • 2020-12-31
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多