2

很容易获得TestDefinitionin 的所有实例IntegrationTest

val tests: Seq[TestDefinition] = (definedTests in IntegrationTest).value

但是我如何获得xsbti.api.Definitionin 的所有实例IntegrationTest?过去可以这样做:

val defs: Seq[Definition] = {
  val analysis = (compile in IntegrationTest).value
  analysis.apis.internal.values.flatMap(_.source.api.definitions)
}

(例如,用于基于套件注释过滤测试:say@RequiresCassandra@RequiresCluster)。但analysis.apis已被删除——不确定何时,但在 SBT 1.3.8 中不存在。我还没有找到任何关于使用什么的文档。

与 Maven 等基于 XML 的工具相比,SBT 的主要优势之一是能够以编程方式定义构建设置。应该可以根据测试代码本身的任何内容过滤测试,而不仅仅是测试名称。我无法相信如此有用的东西——真正将 SBT 置于竞争对手之上的东西——会被删除。

有什么建议么?

4

1 回答 1

2

Tests.allDefs返回Definition给定的 s CompileAnalysis。例如,

val analysis: CompileAnalysis = (compile in IntegrationTest).value
val definitions: Seq[Definition] = Tests.allDefs(analysis)
val annotations: Seq[Annotation] = definitions.flatMap(_.annotations())

2016年发生了变化

val compile = TaskKey[Analysis]("compile", "Compiles sources.", APlusTask)

val compile = TaskKey[CompileAnalysis]("compile", "Compiles sources.", APlusTask)

在哪里

trait Analysis extends CompileAnalysis {
  ...
  val apis: APIs
  ...
}

所以现在我们必须转换为Analysis

analysis match { case analysis: Analysis => ... }

这是什么allDefs

于 2020-04-12T08:45:25.530 回答