我正在写一个java库foo
,它依赖于bar:1.1+
,但是bar
库随着时间的推移已经改变了很多,我想确保我的库与bar
(1.1
... 1.10
)的每个版本兼容。
因此,我希望(在CI期间)使用包含bar:1.X
的类路径运行每个单元测试,并使用每个可用的bar
版本。
我用的是gradle和junit/spock,但我对各种解决方案持开放态度。
对,我可以通过gradle测试任务进行复制,但这非常麻烦,并且测试结果可能难以聚合。理想情况下,我会在测试旁边定义它应该运行的bar版本,例如:
@RunWith("com.acme:bar:1.1..1.10")
public class MyTest { ... }
字符串
但我找不到工具/跑步机。
2条答案
按热度按时间fkaflof61#
这与Maven有关,不确定它如何与CI配合,但可能会帮助您开始。
一个选项可能是使用Maven Archetype
<-
更多信息使用
mvn archetype:generate
,您可以动态生成具有所需版本的项目字符串
hlswsv352#
就我目前而言,至少有三种方法可以做到这一点。
使用多个类加载器
几年前,我遇到了这个问题,并创建了一个JUnit 5扩展来完成这个任务。
具体地说,它将使用一个专用的类路径重新加载测试类,该路径是从当前的Maven描述符构建的,使用Maven下载缺少的内容。
针对同一依赖项的多个版本测试某个东西将看起来像:
字符串
以下是扩展名的源代码:https://github.com/fridujo/classpath-junit-extension
使用maven-invoker-plugin运行示例项目
您可以使用
maven-invoker-plugin
进行多次执行,以在同一项目中使用不同的变量运行测试。在插件的配置中,您将有与您想要测试的版本一样多的执行,每个执行指定要替换的属性值(使用
filterProperties
标记)以下是使用此机制的项目示例:https://github.com/fridujo/rabbitmq-mock配置项到sed依赖文件
无论您使用Jenkins、GitHub操作还是任何其他CI工具或服务,您都可以使用
sed
来更改项目依赖文件中的版本,并在循环或 * 矩阵 * 中重新运行测试以测试多个版本。