从Maven条件运行JUnit测试

4
在Maven中,有没有一种方法可以指定只有在源代码更改时才运行JUnit测试?
例如,我看到这条消息:
[INFO] --- maven-compiler-plugin:2.3.2:testCompile (default-testCompile) @ my_project ---
[INFO] Nothing to compile - all classes are up to date

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


我可以问一下,如果没有更改代码,为什么要运行编译目标? - Paul Grime
这里有两件事情。1-我有一个包含多个配置文件的项目,每个配置文件都将被打包到war中,但是这些配置文件在测试中不会被使用(测试有自己的一套“模拟”配置文件)。因此,一旦测试通过了一个配置文件构建,它们就会通过所有配置文件构建。没有必要为每个构建的配置文件运行测试。2-我正在尝试设置一个多模块构建。每次对任何模块进行更改时,它都会运行所有测试(即使模块没有更改)。 - Vinnie
啊,我明白了。我想可以这样说,如果在配置检查后不应该运行测试,那么配置和代码就不应该成为同一个多模块构建的一部分。我知道这对你没有帮助!也许将您的构建拆分为3个部分。BuildA用于代码,由源代码更改触发,并始终运行测试。BuildB仅用于配置。BuildC用于Web应用程序,由A或B的构建触发。BuildC仅使用A和B的构建工件,因此不会触发编译/测试。 - Paul Grime
请注意,如果标准插件无法满足您的需求,您可能需要覆盖http://grepcode.com/file/repo1.maven.org/maven2/org.apache.maven.plugins/maven-surefire-plugin/2.11/org/apache/maven/plugin/surefire/SurefirePlugin.java#SurefirePlugin.isSkipExecution%28%29。 - Paul Grime
你的项目设置在一个模块中太多了。将测试拆分到不同的模块中,甚至将不同的配置文件分离成单独的模块,一切都会正常工作。 - Manfred Moser
1个回答

1

你的项目设置应该被分成独立的模块。但是如果你不能这样做,你可以在你想要跳过测试的配置文件中设置maven.test.skip属性。请参见有关在网站上跳过测试的更多信息

你正在谈论一个war项目。通常,war项目不应该包含任何代码,而只是一些配置和杂项,如html、jsp、css和JavaScript以及包含Java代码的bundle jar项目。jar项目将包含代码。如果你进行集成测试,一个好的实践是将它们放在单独的模块中。

不同的war配置可以在配置文件中或者使用maven war插件的war覆盖功能在单独的模块中。


为什么我要将单元测试拆分到与被测试代码不同的模块中?这似乎不是一个好主意。我也不明白这如何在代码更改时自动运行测试,但不在没有更改时运行它们。 - Vinnie
编辑了答案以澄清。 - Manfred Moser

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接