我有一些JUnit测试在test
阶段并行执行,每次测试输出一个.json文件,我想调用自定义Java方法对这些文件进行一些聚合和后处理所有测试都已完成执行。
integration-test
阶段之后是默认Maven生命周期中的post-integration-test
阶段,但测试阶段后面没有post-test
阶段,我宁愿不滥用某些阶段为此目的的其他阶段。
问题:在test
阶段结束时对结果进行后处理的推荐方法是什么?
答案 0 :(得分:1)
如another SO post中所述,Maven中没有post-test
阶段有充分理由(主要是单元测试是单元测试)。
但是,在您的情况下,您不需要创建额外的Maven插件,这可能会解决问题,但在维护,测试和共享方面也会增加额外的复杂性。
由于您已经在Java方法中拥有了所需的代码 - 如问题所述 - 使用Exec Maven Plugin及其java
目标可能更有意义。
您可以简单地添加到您的POM中:
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>exec-maven-plugin</artifactId>
<version>1.1.1</version>
<executions>
<execution>
<phase>test</phase> <!-- executed as post-test, that is, after Surefire default execution -->
<goals>
<goal>java</goal>
</goals>
<configuration>
<mainClass>com.sample.JsonFileAggregator</mainClass> <!-- your existing Java code, wrapped in a main -->
<arguments>
<argument>${project.build.directory}</argument> <!-- directory from where to load json files -->
</arguments>
<classpathScope>test</classpathScope> <!-- if your Java code is in test scope -->
</configuration>
</execution>
</executions>
</plugin>
也就是说,将其执行绑定到test
阶段,Maven将在任何默认绑定之后执行它(因此在默认的Maven Surefire执行之后)并且执行为post-test
。
然后可以通过精心设计的(如果不是已经存在的)Java main调用现有的Java代码,可能会将其传递给它参数(例如从上面的代码段中加载.json文件的目录到{{1 }}文件夹,通过其标准属性target
,作为示例)。此外,正如代码段中所述,您的Java代码可能位于${project.build.directory}
范围内(即test
下),因此要使其可见,您还需要配置src/test/java
相应