测试 Tycho Master POM

Test Tycho Master POM

我们公司所有的 RCP plug-ins 都有相同的 Maven parent,在添加了一堆 Maven plug-ins 之后,我意识到 Tycho 不像我想的那样具有确定性喜欢就好。

我知道这不是什么新闻,所以我想为 parentpom.xml 设置一些测试。我在考虑基本的东西:启用哪些配置文件,执行哪些 plug-ins,为定义的 pom.xml、命令行参数和目标抛出什么异常平台。

尽管大多数其他项目似乎在某个地方都有主 POM,但我找不到任何方法来测试它。我该怎么做?

我的团队负责为开发人员创建一套企业 POM。我已经使用 maven-invoker-plugin 来验证父 POM 行为。查看许多 Apache Maven 插件的源(测试)代码,如果您需要入门帮助,您会找到调用程序测试用例。

结果的验证是通过用 Beanshell 或 Groovy 编写的 post build script 完成的。对于您想要验证的事物类型(插件执行、配置文件激活等),我发现的最佳方法是检查 build.log 中的预期消息。我用这样的方法写了一个助手 class:

public static boolean assertPatternsExist(final InputStream is, final String fileName,
                                          final List<String> patternList) throws IOException {

    try (final Scanner scanner = new Scanner(is)) {
        for (final String pattern : patternList) {
            if (scanner.findWithinHorizon(pattern, 0) == null) {
                LOG.error(String.format("Could not match pattern '%s' in file %s", pattern, fileName)); //$NON-NLS-1$
                return false;
            }
        }
    }
    return true;
}

然后我的验证脚本 (verify.groovy) 包括使用这些辅助方法的验证。

def result = assertPatternsExist(new File(basedir, '/build.log'), [
    'INFO.*?maven-dependency-plugin:.*?:copy-dependencies \(some-execution-id\)',
    'INFO.*?maven-assembly-plugin:.*?:single \(another-execution-id\)',
    '.*?propertyDefinedInProfile = valueFromActivatedProfile' ])

在此示例中,测试期望依赖插件的 copy-dependencies 目标是 运行 作为执行的一部分,id 'some-execution-id',随后是程序集插件的 single 目标 运行 作为执行的一部分 'another-execution-id'。第三个模式验证配置文件中定义的 属性 是否具有激活该配置文件时预期的值。模式的顺序很重要。

请注意,搜索条件是根据正则表达式指定的。这应该将测试与日志格式的微小变化隔离开来。测试套件是为 Maven 3 编写的。0.x 并且迄今为止继续与更高版本的 Maven 一起工作。