SBT: Как получить все определения в IntegrationTest? - PullRequest
2 голосов
/ 12 апреля 2020

Легко получить все экземпляры TestDefinition в IntegrationTest:

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

Но как мне получить все экземпляры xsbti.api.Definition в IntegrationTest? Раньше можно было сделать это:

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

(например, для фильтрации тестов по аннотациям набора: скажем, @RequiresCassandra или @RequiresCluster и т. Д.). Но analysis.apis был удален - не уверен, когда, но он отсутствует в SBT 1.3.8. Я не нашел никакой документации о том, что использовать вместо этого.

Одна из главных сильных сторон SBT, по сравнению с такими инструментами на основе XML, как Maven, заключается в способности программно определять параметры сборки. Должна быть возможность фильтровать тесты по чему-либо в самом коде теста, а не только по именам тестов. Я не могу поверить, что что-то настолько полезное - что-то, что действительно ставит SBT выше конкурентов - может быть просто удалено.

Есть предложения?

1 Ответ

2 голосов
/ 12 апреля 2020

Tests.allDefs возвращает Definition с учетом 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 делает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...