测试第谷大师POM

时间:2015-07-28 12:00:27

标签: maven tycho

我们所有公司的RCP插件都有相同的Maven父级,在添加了一堆Maven插件后,我意识到第谷并不像我想的那样具有确定性。

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

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

1 个答案:

答案 0 :(得分:2)

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

使用Beanshell或Groovy编写的post build script验证结果。对于您要验证的内容类型(插件执行,配置文件激活等),我发现的最佳方法是检查build.log预期的消息。我用这样的方法编写了一个辅助类:

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&#39;”,后跟程序集插件的single目标作为执行的一部分运行,另一个执行ID为#39;。第三种模式验证在配置文件中定义的属性是否具有预期值(如果该配置文件已激活)。模式的顺序很重要。

请注意,搜索条件是根据正则表达式指定的。这应该使测试与日志格式的微小变化隔离开来。该测试套件是为Maven 3.0.x编写的,并且到目前为止仍在继续使用Maven版本。