我们所有公司的RCP插件都有相同的Maven父级,在添加了一堆Maven插件后,我意识到第谷并不像我想的那样具有确定性。
这不是新闻,我知道,这就是为什么我想为父 pom.xml 设置一些测试。我正在考虑基本的东西:启用哪些配置文件,执行哪些插件,为定义的 pom.xml ,命令行参数和目标平台抛出什么异常。
尽管大多数其他项目似乎都有某个主POM,但我找不到任何测试方法。我该怎么做?
答案 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版本。