【问题标题】:How to run unit tests against several versions of a dependency如何针对多个版本的依赖项运行单元测试
【发布时间】:2015-08-11 18:11:19
【问题描述】:

我正在编写一个依赖于bar:1.1+ 的java 库foo。 但是库 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 { ... }

但我没有找到相应的工具/运行器。

【问题讨论】:

  • 嗯,使用 Maven,您可以简单地定义多个配置文件并相应地使用这些配置文件开始测试(请参阅 stackoverflow.com/questions/166895/… )。我猜 gradle 也有类似的可能性。
  • 只是想注意,您要在此处运行的测试实际上是集成测试,而不是单元测试。对于单元测试,通常会模拟出对 bar 库的依赖。
  • @unigeek 不是说你错了,但这可能取决于bar 是什么库,假设它是番石榴,没有理智的人会嘲笑它的所有用途^^
  • 也许你可以在 Gradle 中生成依赖配置,每个配置都有一个版本的依赖。然后针对这些配置运行测试任务。很抱歉,我不是 Groovy 专家,无法就代码提示您。
  • 你使用构建工具吗?哪一个? Maven,Gradle?您使用的是什么 CI 系统?詹金斯? GitHub Acrions?

标签: java unit-testing junit gradle spock


【解决方案1】:

这与 Maven 相关,不确定它是否适合 CI,但可能会帮助您入门。

一种选择可能是使用Maven Archetype <- 更多信息

使用mvn archetype:generate,您可以动态生成具有您需要的版本的项目

mvn archetype:generate                                  
  -DarchetypeGroupId=<archetype-groupId>                
  -DarchetypeArtifactId=<archetype-artifactId>          
  -DarchetypeVersion=<archetype-version>                
  -DgroupId=<my.groupid>                                
  -DartifactId=<my-artifactId>
  -Dversion=<custom-version>

【讨论】:

  • 我不熟悉 maven 原型,但是 AFAICT 这只会帮助我为每个依赖版本生成一个项目,我想避免这种情况并保留一个项目。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-05-29
  • 2012-02-05
  • 2020-11-05
  • 2010-12-25
  • 2015-04-09
  • 2023-04-06
  • 1970-01-01
相关资源
最近更新 更多