测试 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 一起工作。
我们公司所有的 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 一起工作。