我有一个多模块的项目。对于父项目,每个项目都有自己的单元相同。当我使用mvn测试时,不会运行测试,目标文件夹不包含任何测试类。父项目甚至没有创建目标文件夹
结构如下:
|-module1-> pom.xml
|-module2-> pom.xml
|-module3-> pom.xml
|-src/main
|-src/test/java/MyTest.java
|-pom.xml见下面的poms (我省略了标准的pom样板)
亲本pom.xml
<groupId>com.tests</groupId>
<artifactId>unit-tests</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>pom</packaging>
<modules>
<module>module1</module>
<module>module2</module>
<module>module3</module>
</modules>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<scope>test</scope>
<version>RELEASE</version>
</dependency>
<dependencies>儿童pom有:
<parent>
<groupId>com.tests</groupId>
<artifactId>unit-tests</artifactId>
<version>1.0-SNAPSHOT</version>
</parent>每当我运行mvn clean test时,都不会运行任何测试,在控制台中,我得到如下内容:
[INFO] ------------------------------------------------------------------------
[INFO] Building unit-tests 1.0-SNAPSHOT
[INFO] ------------------------------------------------------------------------
[INFO]
[INFO] ------------------------------------------------------------------------顺便说一下,父项目没有任何源代码,只是测试。
发布于 2017-12-02 13:00:05
您使用的是打包pom。有了这种打包,您只能运行少量的目标绑定到阶段(如install和deploy)。为了在父程序中运行测试,您必须明确说明您的意图,如下所示:
$mvn clean compiler:testCompile surefire:test
[INFO] -------------------------------------------------------
[INFO] T E S T S
[INFO] -------------------------------------------------------
[INFO] Running com.tests.unit_tests.TestModules
Test1!
[ERROR] Tests run: 1, Failures: 1, Errors: 0, Skipped: 0, Time elapsed: 0.016 s <<< FAILURE! - in com.tests.unit_tests.TestModules
[ERROR] test1(com.tests.unit_tests.TestModules) Time elapsed: 0.003 s <<< FAILURE!
java.lang.AssertionError
at com.tests.unit_tests.TestModules.test1(TestModules.java:11)
[INFO]
[INFO] Results:
[INFO]
[ERROR] Failures:
[ERROR] TestModules.test1:11
[INFO]
[ERROR] Tests run: 1, Failures: 1, Errors: 0, Skipped: 0
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] Reactor Summary:
[INFO]
[INFO] unit-tests ......................................... FAILURE [ 1.262 s]
[INFO] module1 ............................................ SKIPPED
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 1.473 s
[INFO] Finished at: 2017-12-02T11:04:50-02:00
[INFO] Final Memory: 16M/207M
[INFO] ------------------------------------------------------------------------这样,您就可以告诉maven您想要编译(生成目标)并在聚合器(它有父pom)中运行您的测试。否则,maven将只运行模块中的测试。
$mvn test
[INFO] Scanning for projects...
[INFO] ------------------------------------------------------------------------
[INFO] Reactor Build Order:
[INFO]
[INFO] unit-tests
[INFO] module1
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] Building unit-tests 1.0-SNAPSHOT
[INFO] ------------------------------------------------------------------------
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] Building module1 1.0-SNAPSHOT
[INFO] ------------------------------------------------------------------------
[INFO]
[INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ module1 ---
[WARNING] Using platform encoding (UTF-8 actually) to copy filtered resources, i.e. build is platform dependent!
[INFO] Copying 0 resource
[INFO]
[INFO] --- maven-compiler-plugin:3.2:compile (default-compile) @ module1 ---
[INFO] Nothing to compile - all classes are up to date
[INFO]
[INFO] --- maven-resources-plugin:2.6:testResources (default-testResources) @ module1 ---
[WARNING] Using platform encoding (UTF-8 actually) to copy filtered resources, i.e. build is platform dependent!
[INFO] Copying 0 resource
[INFO]
[INFO] --- maven-compiler-plugin:3.2:testCompile (default-testCompile) @ module1 ---
[INFO] Nothing to compile - all classes are up to date
[INFO]
[INFO] --- maven-surefire-plugin:2.17:test (default-test) @ module1 ---
[INFO] ------------------------------------------------------------------------
[INFO] Reactor Summary:
[INFO]
[INFO] unit-tests ......................................... SUCCESS [ 0.002 s]
[INFO] module1 ............................................ SUCCESS [ 0.424 s]
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 0.504 s
[INFO] Finished at: 2017-12-02T11:06:24-02:00
[INFO] Final Memory: 9M/241M
[INFO] ------------------------------------------------------------------------我知道这是一本难读的书,但你应该看看它:http://maven.apache.org/guides/introduction/introduction-to-the-lifecycle.html#Packaging
例如,纯元数据(打包值为pom)的项目只将目标绑定到安装和部署阶段(关于某些打包类型的目标到构建阶段绑定的完整列表,请参阅生命周期参考)。
编辑
正如eis所指出的。尽管可以这样做,但maven使它很难做到,因为默认情况下,不应该这样做。您的单元测试应该在他们正在测试的模块中。分散他们不是个好办法。
答案是:你可以做到,是的。但你不应该!生活中有些事你可以做,但不应该.
如果我们谈论的是integration tests,那将是另一个故事。那是另一种讨论。
干杯!
发布于 2017-12-02 12:39:44
maven surefire插件运行所有的JUnit测试,其中测试类的名称以Test结尾-大写为'T‘。根据您的信息,您的测试类名为Mytest。重构要命名为MyTest的类将使其工作。
发布于 2017-12-02 12:39:01
多模块父程序具有打包的pom,因此,根据定义,只能包含pom,而不包含任何源代码(甚至不能包含测试源代码!)。这就是为什么您的测试不能运行,并且没有目标文件夹:在pom类型的项目上不能运行或编译任何东西。多模块父级仅用于将模块组合在一起。
https://stackoverflow.com/questions/47607842
复制相似问题