gpt4 book ai didi

Maven Invoker 插件与 Maven Failsafe 插件 : Which to use for integration-test?

转载 作者:行者123 更新时间:2023-12-05 09:19:37 28 4
gpt4 key购买 nike

两者的文档(FailsafeInvoker)表明它们对于运行集成测试很有用。我不知道要使用哪一个进行集成测试。

我能看到的唯一区别是 Failsafe 插件是专门为运行集成测试而设计的,而 Invoker 插件恰好对运行集成测试很有用,但它的主要目的是别的。然而,当我在 Eclipse 中创建一个 maven-plugin 时,Maven Invoker Plugin 已经包含在 POM 文件中,代码如下。

<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>

它们之间的主要区别是什么?是否有特定情况下应该优先进行集成测试?

最佳答案

用例确实不同。您可以将 maven-invoker-plugin 视为 Failsafe 插件的特定子集,旨在用于测试您的自定义 Maven 插件,尽管它的用途可能更广泛。

故障安全插件

maven-failsafe-pluginmaven-surefire-plugin齐头并进(其实都在surefire project 下):用于编写Java代码测试。 Surefire 和 Failsafe Plugin 的区别在于,第一个用于编写单元测试,而另一个用于编写集成测试。

与单元测试相反,集成测试是一种需要存在环境的测试。环境是一个很大的术语,但它涵盖了测试运行所需的所有其他工具。例如,如果您想根据 Web 服务器或数据库的存在对应用程序运行测试,这通常是集成测试。

Maven 通过特定阶段将此定义集成到 default 生命周期中,以便设置测试所需的环境、运行测试和销毁环境:

The Maven lifecycle has four phases for running integration tests:

  • pre-integration-test for setting up the integration test environment.
  • integration-test for running the integration tests.
  • post-integration-test for tearing down the integration test environment.
  • verify for checking the results of the integration tests.

一个示例是在 pre-integration-test 中设置和启动 Web 服务器,在 integration-test 中测试 HTTP 调用,最后在post-integration-test

请注意,本例中的集成测试是用 Java 编写的,位于 src/test/java 中。有 a naming convention将它们与单元测试区分开来。因此,您正在编写测试代码。

调用者插件

您说得对,它的主要用例不是运行集成测试。它是为了在构建期间调用其他 Maven 项目而设计的。当您想针对其他 Maven 项目运行测试时,该特定用例非常有用。

This plugin is in particular handy to perform integration tests for other Maven plugins. The Invoker Plugin can be employed to run a set of test projects that have been designed to assert certain features of the plugin under test.

假设您正在开发一个 Maven 插件,并且您想要测试它的行为是否正确。您可以使用 Surefire 插件编写测试以对其功能进行基本测试,即不需要将插件作为一个整体运行的功能。

您甚至可以使用 Failsafe 插件编写集成测试,这些测试将针对 Maven 测试项目执行完整的插件运行并检查其输出。但这很快就会变得麻烦:使用自定义 Maven 插件在磁盘上创建 Maven 项目并让 Invoker 插件调用该项目会更容易。然后您可以测试运行是否正确。

总的来说,要测试您的 Maven 插件,您甚至不需要编写任何 Java 代码:您只需在目录中使用您的插件创建测试 Maven 项目,让 Invoker Plugin invoke it ,并使用 a post build script 验证一切是否正确用 BeanShell 或 Groovy 编写。这些是集成测试,因为它们需要一个环境才能运行(主要是 Maven 本身),但您并没有真正对它们进行编码。

这可能是 Eclipse 为您生成此文件的原因:您创建了一个打包 maven-plugin 的 Maven 项目,因此它会将您引导至 Invoker Plugin 以对其进行测试。

关于Maven Invoker 插件与 Maven Failsafe 插件 : Which to use for integration-test?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40010745/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com