【问题标题】:Maven - how to include a 'generic' plugin intended for integration tests?Maven - 如何包含用于集成测试的“通用”插件?
【发布时间】:2018-04-05 13:16:22
【问题描述】:

我想编写一个可用于集成测试的插件。为简单起见,我们假设它是一个简单的 MOJO:

@Mojo(name = "test", defaultPhase = LifecyclePhase.INTEGRATION_TEST)
public class IntegrationTestPlugin extends AbstractMojo {
    public void execute() {
        ...
    }
}

这个插件可以从另一个项目中调用:

<plugin>
    <groupId>my.group.id</groupId>
    <artifactId>my.artifact.id</artifactId>
    <executions>
        <execution>
            <goals>
                <goal>test</goal>
            </goals>
        </execution>
   </executions>
</plugin>

这会让我的生活更轻松,因为我只是执行了插件而无需编写任何额外的代码。举例来说,插件可以检查 GET http://localhost:8080/&lt;some endpoint&gt; 在根据项目要求生成本地 Web 容器、数据库之后是否返回 200。

我需要名称符合约定 (**/IT*.java, **/*IT.java or **/*ITCase.java) 的类,但是在这种情况下如何发现和执行这些类?这与 Mojo 的 execute() 有什么关系?

简单地将SomeTestIT.java 放在插件项目的src/main/test/... 中(而不是在执行插件的项目中,就像没有插件一样)是行不通的。我不知道如何继续。

这将如何工作以及 Mojo 类中的 execute() 应该是什么样的?

【问题讨论】:

  • 看过 maven-failsafe-plugin 了吗?
  • @khmarbaise 还没有,但肯定会。我认为这样的插件与我的问题无关,因为在这个插件中,测试用例(**/*IT.java 等)在插件之外。我想把它们放在插件里。

标签: java maven junit integration-testing maven-plugin


【解决方案1】:

当您继承 AbstractMojo 时,除其他外,您必须覆盖 getDefaultIncludes()
返回要包含的 ant 路径样式值:

 @Override
 protected String[] getDefaultIncludes() {
     return new String[]{ "**/IT*.java", "**/*IT.java", "**/*ITCase.java"};
 }

您应该从github 上的maven-failsafe-plugin 源代码中汲取灵感,该源代码用于在 Maven 中执行集成测试。

【讨论】:

  • 有道理,谢谢,这可能对我有很大帮助!我目前唯一感到困惑的是这些 IT*.java 类将如何找到传递给插件 mojo 的参数(使用 @Parameter 注释设置)。我可能应该将它们添加到 Mojo 的 execute() 中的一些静态单例中,以便 IT*.java 类稍后可以访问它们?
  • 不客气。这些不是将找到参数的测试类,而是将使用其参数的 mojo。我认为您应该首先了解 mojos 的哲学
  • 就我而言,我希望将测试用例 放入 插件中。这些测试用例的确切行为取决于参数。这些参数提供给 mojo(根据字段上的@Parameter)。不知何故,我需要能够将这些参数传递给测试用例。我会调查的。
猜你喜欢
  • 1970-01-01
  • 2014-01-07
  • 1970-01-01
  • 1970-01-01
  • 2011-01-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多