首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Maven不会从父项目或子项目运行测试

Maven不会从父项目或子项目运行测试
EN

Stack Overflow用户
提问于 2017-12-02 12:20:59
回答 3查看 4.6K关注 0票数 4

我有一个多模块的项目。对于父项目,每个项目都有自己的单元相同。当我使用mvn测试时,不会运行测试,目标文件夹不包含任何测试类。父项目甚至没有创建目标文件夹

结构如下:

代码语言:javascript
复制
|-module1-> pom.xml
|-module2-> pom.xml
|-module3-> pom.xml
|-src/main
|-src/test/java/MyTest.java
|-pom.xml

见下面的poms (我省略了标准的pom样板)

亲本pom.xml

代码语言:javascript
复制
<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有:

代码语言:javascript
复制
<parent>
    <groupId>com.tests</groupId>
    <artifactId>unit-tests</artifactId>
    <version>1.0-SNAPSHOT</version>
</parent>

每当我运行mvn clean test时,都不会运行任何测试,在控制台中,我得到如下内容:

代码语言:javascript
复制
[INFO] ------------------------------------------------------------------------
[INFO] Building unit-tests 1.0-SNAPSHOT
[INFO] ------------------------------------------------------------------------
[INFO]
[INFO] ------------------------------------------------------------------------

顺便说一下,父项目没有任何源代码,只是测试。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2017-12-02 13:00:05

您使用的是打包pom。有了这种打包,您只能运行少量的目标绑定到阶段(如installdeploy)。为了在父程序中运行测试,您必须明确说明您的意图,如下所示:

代码语言:javascript
复制
$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将只运行模块中的测试。

代码语言:javascript
复制
$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,那将是另一个故事。那是另一种讨论。

干杯!

票数 4
EN

Stack Overflow用户

发布于 2017-12-02 12:39:44

maven surefire插件运行所有的JUnit测试,其中测试类的名称以Test结尾-大写为'T‘。根据您的信息,您的测试类名为Mytest。重构要命名为MyTest的类将使其工作。

票数 2
EN

Stack Overflow用户

发布于 2017-12-02 12:39:01

多模块父程序具有打包的pom,因此,根据定义,只能包含pom,而不包含任何源代码(甚至不能包含测试源代码!)。这就是为什么您的测试不能运行,并且没有目标文件夹:在pom类型的项目上不能运行或编译任何东西。多模块父级仅用于将模块组合在一起。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47607842

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档