首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Maven调用程序插件与Maven故障安全插件:用于集成测试的是哪一个?

Maven调用程序插件与Maven故障安全插件:用于集成测试的是哪一个?
EN

Stack Overflow用户
提问于 2016-10-13 01:11:43
回答 1查看 768关注 0票数 2

两者的文档(故障安全被叫者)都表明它们对于运行集成测试很有用。我不知道该用哪一个来进行集成测试。

我能看到的唯一不同是,故障安全插件是专门为运行集成测试而设计的,而调用程序插件恰好对运行集成测试是有用的,但它的主要目的是别的。但是,当我在Eclipse中创建maven-plugin时,已经在POM文件中包含了Maven Invoker插件,下面的代码如下所示。

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

他们之间的主要区别是什么?在集成测试中,是否存在一个比另一个更适合的特定情况?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-10-13 09:39:59

用例确实不同。您可以将maven-invoker-plugin看作是用于测试自定义Maven插件的故障安全插件的一个特定子集,尽管它的使用范围可能更广。

故障安全插件

maven-failsafe-pluginmaven-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项目,因此它将引导您使用调用程序插件来测试它。

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

https://stackoverflow.com/questions/40010745

复制
相关文章

相似问题

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