Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/310.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 在Maven中运行JUnit测试,无需构建和复制文件_Java_Maven - Fatal编程技术网

Java 在Maven中运行JUnit测试,无需构建和复制文件

Java 在Maven中运行JUnit测试,无需构建和复制文件,java,maven,Java,Maven,我有一个大型Maven项目,其中有几个模块。当我想从一个模块运行JUnit测试时,我会在包含所有模块的目录中运行“mvn-Dtest=NameOfTest test”。当我运行这个命令时,Maven遍历每个模块并尝试编译它(尽管它已经编译),这涉及到复制一堆文件并增加测试的总时间。Maven surefire插件的“test”命令似乎执行了测试的所有步骤。我想知道是否有一种方法可以只执行测试步骤,而不用担心所有试图编译和复制的文件 以下是测试开始前的一些输出: [INFO] [INFO] --

我有一个大型Maven项目,其中有几个模块。当我想从一个模块运行JUnit测试时,我会在包含所有模块的目录中运行“mvn-Dtest=NameOfTest test”。当我运行这个命令时,Maven遍历每个模块并尝试编译它(尽管它已经编译),这涉及到复制一堆文件并增加测试的总时间。Maven surefire插件的“test”命令似乎执行了测试的所有步骤。我想知道是否有一种方法可以只执行测试步骤,而不用担心所有试图编译和复制的文件

以下是测试开始前的一些输出:

[INFO] 
[INFO] --- build-helper-maven-plugin:1.5:add-test-source (add-test-source) @ module1 ---
[INFO] Test Source directory: <directory in module1 with some generated sources> added.
[INFO] 
[INFO] --- maven-resources-plugin:2.5:testResources (default-testResources) @ module1 ---
[debug] execute contextualize
[INFO] Copying 108 resources
[INFO] Copying 1113 resources
[INFO] Copying 1 resource
[INFO]
[信息]
[信息]---build helper maven插件:1.5:添加测试源(添加测试源)@module1---
[信息]测试源目录:已添加。
[信息]
[信息]---maven资源插件:2.5:testResources(默认testResources)@module1---
[调试]执行上下文化
[信息]正在复制108个资源
[信息]正在复制1113资源
[信息]正在复制1个资源
[信息]

它会对其他每个模块重复此操作。总的来说,它需要一两分钟才能真正开始测试。有没有人知道一种不用预先编译就能运行测试的方法?如果我还需要提供更多信息,请告诉我。

如果您只想从cmd行跳过测试编译,请使用
-Dmaven.test.skip=true

我还应该指出,虽然
maven.test.skip
不会编译任何测试,但是它会执行进入
的任何编译测试

根据maven resources插件中的文档,应该使用上面的
maven.test.skip
arg跳过测试资源的复制

将此设置为“true”以绕过测试资源的复制。它的用途并不简单 推荐,但有时很方便。用户属性为: maven.test.skip


从测试所在的模块中运行测试有什么问题?这样,Maven就不会尝试构建您不感兴趣的其他模块。

如果您只想运行生命周期的测试阶段,而不运行之前的所有阶段,那么您也可以调用绑定到测试阶段的目标:

mvn surefire:test
或者如果您只想运行一个测试

mvn -Dtest=NameOfTest surefire:test

当然,这样做也会跳过实际测试的执行?这并没有帮助。它阻止测试启动,同时对我看到的编译和复制没有影响。我现在看到您的编辑。它可能跳过了测试的编译和复制,但我想跳过所有编译和复制,如果可能的话,只启动测试。它还阻止了测试的启动—您知道如何将测试放入?@JamesB—如果
testOutputDirectory
中仍有一些测试,并且您没有执行
clean
@johntreprereneur,这不会跳过测试的执行。不,我已经尝试过了。一般来说,它可能会工作,但在我的例子中,测试无法找到它想要的东西,并抛出异常。如果这是最好的方法,我可能会被卡住。谢谢你的回复@约翰特普伦纳也提出了这一建议。对于我正在使用的特定代码库,它在我的案例中不起作用。如果你知道它在一般情况下是有效的,我可以花一些时间试着让它发挥作用。@Ian我没有看到其他人建议我所做的。您能确认从何处运行此命令吗?您暗示它来自包含所有模块的顶级项目。我是说从所需的模块本身运行命令。也许他删除了评论。实际上,在我发布本文之前,我已经尝试了您的建议,从模块内部而不是从顶层目录运行测试,但是我需要运行的测试中出现了异常,因为它找不到所需的资源。不过,这是一个很好的建议,我认为它对其他人也适用。问题是,您的测试实际上不是单元测试,应该得到修复。在我的例子中,
mvn test-DfailIfNoTests=false-Dtest=package.name.TestClass#testMethod-pl subModuleName-am
可以重建模块和模块依赖关系。但是
mvn surefille:test-DfailIfNoTests=false-Dtest=package.name.TestClass#testMethod-pl subModuleName-am
无法解析模块依赖关系