Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/maven/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 马文赢了';t从父项目或子项目运行测试_Java_Maven_Testing_Junit - Fatal编程技术网

Java 马文赢了';t从父项目或子项目运行测试

Java 马文赢了';t从父项目或子项目运行测试,java,maven,testing,junit,Java,Maven,Testing,Junit,我有一个多模块的项目。每个项目都有自己的unittest,与父项目相同。当我使用mvn测试时,不会运行任何测试,并且目标文件夹不包含任何测试类。父项目甚至不创建目标文件夹 结构如下所示: |-module1-> pom.xml |-module2-> pom.xml |-module3-> pom.xml |-src/main |-src/test/java/MyTest.java |-pom.xml $mvn clean compiler:testCompile suref

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

结构如下所示:

|-module1-> pom.xml
|-module2-> pom.xml
|-module3-> pom.xml
|-src/main
|-src/test/java/MyTest.java
|-pom.xml
$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] ------------------------------------------------------------------------
参见下面的pom(我省略了标准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,因此,根据定义只能包含pom,不能包含任何源代码(甚至不能测试源代码!)。这就是您的测试无法运行且无法获得目标文件夹的原因:pom类型的项目上无法运行或编译任何内容。多模块父级仅用于将模块分组在一起。

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

您使用的是打包
pom
。使用这种打包,您只允许运行少量绑定到阶段的目标(如
安装
部署
)。为了在父级中运行测试,您必须明确您的意图,如下所示:

|-module1-> pom.xml
|-module2-> pom.xml
|-module3-> pom.xml
|-src/main
|-src/test/java/MyTest.java
|-pom.xml
$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] ------------------------------------------------------------------------
我知道这本书很难读,但你应该看看:

例如,一个纯元数据的项目(打包值为 pom)仅将目标绑定到安装和部署阶段(对于完整的 构建某些打包类型的阶段绑定的目标列表, 请参阅第页)

编辑

正如eis指出的那样。尽管有可能做到这一点,但maven让这一点变得很难,因为默认情况下你不应该这么做。您的单元测试应该在他们正在测试的模块中。分散它们不是一种好的做法

答案是:你能做到,是的。但你不应该!生活中有些事情你可以做,但不应该

如果我们谈论的是集成测试,那么情况就不同了。。这是一个不同的讨论


干杯

这是问题中的一个输入错误,在代码命名约定中,它没有回答为什么子项目的测试没有运行,但它并没有解决这个问题。检查我的答案,它会有帮助。@testing_-kate correct,它不正确。如果这是这个问题的重点,您应该相应地进行编辑,删除关于pom项目中测试的任何误导性信息(然后我将删除这个答案)。虽然这是正确的,但根据定义,pom封装模块不应该包含测试。我认为你建议如何在一个模块中运行测试是一种伤害,而这个模块本来就不应该包含这些测试——从长远来看,这只会导致麻烦。@eis我同意,但可以执行它们。尽管不可取。我完全同意你的看法。单元测试应该在他们正在测试的模块中。@eis我回答这个问题,因为你可以做。但我将对其进行编辑,并明确表示这不是一个好的做法。干杯@wleao,我将测试移到了子模块。当我调用mvn clean test-pl:module1时。我得到“没有要运行的测试”。@testing\u kate您在测试中是否使用org.junit.Test注释?在你的问题中显示一些代码。
$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] ------------------------------------------------------------------------