如何在OpenRewrite测试中让pomXml忽略版本或校验版本更高?
解决RewriteTest依赖版本测试的两种方案
针对你用Kotlin写的UpgradeNonSpringDependenciesTest测试类,遇到新版本发布导致测试失败的问题,有两种可行的解决思路:
方案一:忽略版本校验
如果只需要确认自定义Recipe成功触发了依赖升级动作,不需要绑定到具体版本号,可以修改断言逻辑,只校验依赖的groupId和artifactId,完全忽略版本:
@Test fun upgradeKafkaCore() = runRecipe(UpgradeNonSpringDependenciesTest()) { pomXml { // 仅验证kafka-core依赖存在,不限制版本 hasDependency("org.apache.kafka", "kafka-core") // 可选:确保旧版本1.0.1已经被替换掉 doesNotHaveDependency("org.apache.kafka", "kafka-core", "1.0.1") } }
也可以用XPath直接匹配依赖节点,跳过版本校验:
@Test fun upgradeKafkaCore() = runRecipe(UpgradeNonSpringDependenciesTest()) { pomXml { matchesXpath("//dependency[groupId='org.apache.kafka' and artifactId='kafka-core']") } }
方案二:校验版本高于指定旧版本
如果需要确保升级后的版本不低于某个最低标准(比如必须高于1.0.1),可以借助Rewrite的版本处理工具或者Maven版本范围来实现:
方式1:手动解析并比较版本
import org.openrewrite.java.dependencies.Version @Test fun upgradeKafkaCoreVersionMeetsMinimum() = runRecipe(UpgradeNonSpringDependenciesTest()) { pomXml { val requiredMinVersion = Version.parse("1.0.1") // 获取pom中kafka-core的实际版本 val actualVersionStr = evaluateXpath("//dependency[groupId='org.apache.kafka' and artifactId='kafka-core']/version/text()") val actualVersion = Version.parse(actualVersionStr) // 断言实际版本严格大于旧版本 check(actualVersion > requiredMinVersion) { "kafka-core当前版本$actualVersionStr 未满足高于$requiredMinVersion的要求" } } }
方式2:用Maven版本范围断言
直接利用Rewrite的hasDependency方法支持Maven版本范围的特性,指定版本必须大于1.0.1:
@Test fun upgradeKafkaCoreVersionMeetsMinimum() = runRecipe(UpgradeNonSpringDependenciesTest()) { pomXml { // [1.0.2,) 表示版本≥1.0.2,也就是所有高于1.0.1的版本 hasDependency("org.apache.kafka", "kafka-core", "[1.0.2,)") } }
内容的提问来源于stack exchange,提问作者JGleason
相关产品推荐
相关产品推荐

