两者的文档(故障安全,被叫者)都表明它们对于运行集成测试很有用。我不知道该用哪一个来进行集成测试。
我能看到的唯一不同是,故障安全插件是专门为运行集成测试而设计的,而调用程序插件恰好对运行集成测试是有用的,但它的主要目的是别的。但是,当我在Eclipse中创建maven-plugin时,已经在POM文件中包含了Maven Invoker插件,下面的代码如下所示。
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-invoker-plugin</artifactId>
<version>1.7</version>
<configuration>
<debug>true</debug>
<cloneProjectsTo>${project.build.directory}/it</cloneProjectsTo>
<pomIncludes>
<pomInclude>*/pom.xml</pomInclude>
</pomIncludes>
<postBuildHookScript>verify</postBuildHookScript>
<localRepositoryPath>${project.build.directory}/local-repo</localRepositoryPath>
<settingsFile>src/it/settings.xml</settingsFile>
<goals>
<goal>clean</goal>
<goal>test-compile</goal>
</goals>
</configuration>
<executions>
<execution>
<id>integration-test</id>
<goals>
<goal>install</goal>
<goal>integration-test</goal>
<goal>verify</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins> 他们之间的主要区别是什么?在集成测试中,是否存在一个比另一个更适合的特定情况?
发布于 2016-10-13 09:39:59
用例确实不同。您可以将maven-invoker-plugin看作是用于测试自定义Maven插件的故障安全插件的一个特定子集,尽管它的使用范围可能更广。
故障安全插件
maven-failsafe-plugin与maven-surefire-plugin (实际上它们都在项目下)并驾齐驱:它用于用项目代码编写测试。安全插件和故障安全插件的区别在于,第一个插件用于编写单元测试,而另一个插件用于编写集成测试。
集成测试,与单元测试相反,是一种要求环境存在的测试。环境是一个很大的术语,但它包含了测试运行所需的所有其他工具。例如,如果希望运行依赖于web服务器或数据库存在的应用程序的测试,则通常是集成测试。
Maven通过设置测试所需的环境、运行测试和破坏环境的特定阶段,在default生命周期中集成了这个定义:
Maven生命周期有四个阶段来运行集成测试:
pre-integration-test。integration-test。post-integration-test。verify。一个例子是在pre-integration-test中设置和启动一个web服务器,在integration-test中测试HTTP调用,最后在post-integration-test中停止web服务器。
请注意,本例中的集成测试是用Java编写的,并位于src/test/java中。有命名约定来区分它们和单元测试。所以你在编写测试的代码。
调用程序插件
您是对的,它的主要用例不是用于运行集成测试。它的设计是为了在构建过程中调用其他Maven项目。当您想要对其他Maven项目运行测试时,这个特定的用例非常有用。
这个插件对于执行其他Maven插件的集成测试特别方便。调用程序插件可以用来运行一组测试项目,这些测试项目的设计目的是维护被测试插件的某些特性。
假设您正在开发一个Maven插件,您希望测试它的行为是否正确。您可以使用尽力而为的插件编写测试来执行其功能的基本测试,即不需要运行整个插件的特性。
您甚至可以使用故障安全插件编写集成测试,这将是对Maven测试项目执行完整插件运行并检查其输出的测试。但是这很快就会变得很麻烦:使用您的自定义Maven插件在磁盘上创建Maven项目将更加容易,并让调用程序插件调用这个项目。然后,您可以测试运行是否正确。
总之,要测试您的Maven插件,甚至不需要编写任何Java代码:您只需在目录中使用插件创建测试Maven项目,让调用程序插件调用它,并验证使用用BeanShell或Groovy编写的构建后脚本是否正确。这些都是集成测试,因为它们需要一个环境来运行(主要是Maven本身),但是您并没有对它们进行真正的编码。
这可能是Eclipse为您生成此插件的原因:您创建了一个打包maven-plugin的Maven项目,因此它将引导您使用调用程序插件来测试它。
https://stackoverflow.com/questions/40010745
复制相似问题