单元测试 Maven 插件

问题描述 投票:0回答:3

我正在寻找有关如何为 Maven 插件编写单元测试的信息。尽管 Maven 站点上有关于此主题的页面,但只有一个示例单元测试,没有任何用处。我还找到了这个wiki页面,但它已经4年多没有更新了,所以我不愿意对它投入任何信心。

我查了《The Definitive Guide to Maven》这本书,但它根本没有提到这个主题。我想用 Groovy 或 Java 编写单元测试,并且希望获得有关如何执行此操作的任何信息。

我使用的是 Maven 版本 2.1.0。

java unit-testing maven-2 maven-plugin
3个回答
14
投票

您发布的第一个链接是了解各种可能性并开始的正确位置。但举例来说,最好的办法是查看现有插件的来源。话虽如此:

对于单元测试,我更喜欢

maven-plugin-testing-harness
。您可以在 Maven Plugin Harness Wiki 中了解(一点)更多信息,但是,正如我所说,特别是在使用它的插件中,例如
maven-compiler-plugin
。检查
CompilerMojoTestCase

对于集成测试(IMO 对于插件进行集成测试非常重要),我推荐

shitty-maven-plugin
(超级有用的集成测试 ThingY),特别是如果您有兴趣在 Groovy 中编写测试,或者
maven-invoker-plugin
。它们很相似,但都具有另一个所没有的功能。 SHITTY 插件的网站提到了几个使用它的插件。看看吧。


3
投票

如果您确实在插件中进行了单元测试,则第一个链接是正确的。但这在一定程度上取决于您想在这里测试什么。该功能的实现还是与Maven结合?但我的经验是,对插件进行某种集成测试可能会更好。为此,您应该深入研究 Maven Invoker Plugin,它可以为您提供帮助。也许您应该看看其他插件,它们现有如何进行测试。


0
投票

Maven 插件的单元测试是一项相当复杂的任务,主要是因为在插件开始工作之前必须模拟(或创建)和注入依赖项。同时,借助

maven-invoker-plugin
进行集成测试可能会相当慢,尤其是当测试数量相当大时。我创建了
Farea
,它介于单元测试和集成测试之间。你可以这样使用它:

@Test
void worksAsExpected(@TempDir Path dir) {
  new Farea(dir).together(f -> {
    f.files()
      .file("src/test/java/Hello.java")
      .write("class Hello {}".getBytes());
    f.dependencies().append("org.cactoos", "cactoos", "0.55.0");
    f.plugins().appendItself(); // here!
    f.exec("compile");
    MatcherAssert.assertThat(
      "Compiles without any issues",
      f.files().log(),
      RequisiteMatcher.SUCCESS
    );
  });
}

此 JUnit 测试方法将创建一个新的临时目录,其中包含

pom.xml
,然后运行
mvn
进程,收集其日志。这种方法的主要优点是执行速度。它比
maven-invoker-plugin
更快(当然,可配置性较差)。

© www.soinside.com 2019 - 2024. All rights reserved.