Библиотека Scala доступна как в компиляции, так и в тестовой конфигурации - PullRequest
3 голосов
/ 07 марта 2019

У меня есть библиотека, которую я хочу выставить как в модульных тестах в Scala, так и в самом коде.

В sbt я добавил свою библиотечную зависимость с конфигурацией "test", и она стала доступна для тестов, но я не могу использовать ее в коде. Если я оставлю конфигурацию be или добавлю "compile", она не будет доступна для импорта в модульных тестах.

libraryDependencies ++= Seq(
  "org.scalacheck" %% "scalacheck" % "1.14.0",
  "org.scalatest" %% "scalatest" % "3.0.6" % "test",
  "org.scalactic" %% "scalactic" % "3.0.6" % "test")

Основная проблема в том, что я предоставляю абстрактный класс, который хочу использовать повсюду в другом коде: abstract class UnitSpec extends FlatSpec with Matchers with ScalaCHeckDrivenPropertyChecks, а также использую его в тестах библиотеки. Если я добавлю "test" в ScalaCheck, он не сможет найти его в основном коде библиотеки. Если я оставлю это как есть, оно не может с org.scalatestplus.scalacheck.ScalaCheckDrivenPropertyChecks. Раньше это было нормально и нормально работало с 3.0.5 и GeneratorDrivenProperyChecks, но это устарело.

Есть ли способ достичь того, чего я хочу? Я пытался "test->compile", но это также не делает то, на что я надеялся ...

Ответы [ 2 ]

2 голосов
/ 07 марта 2019

Вы можете комбинировать конфигурации.Чтобы иметь библиотеку как при компиляции, так и при тестировании, вы просто добавляете конфигурации ботов.

// wrong: libraryDependencies += "<organization>" %% "<module>"  % "<version>" % "compile->compile" % "test->compile"

Синтаксис примерно означает: конфигурация проекта depenOn (->) конфигурация libraryDependency.

Обновление

Вы также можете добавить зависимость дважды для разных конфигураций.

libraryDependencies += "<organization>" %% "<module>"  % "<version>",
libraryDependencies += "<organization>" %% "<module>"  % "<version>" % "test"

Обновление 2

Я думаю, что синтаксис в первом примере не тот, что я хотел предоставить.

libraryDependencies += "<organization>" %% "<module>"  % "<version>" % "compile->compile;test->compile"

По крайней мере, это то, что я использую в своем libraryDependencies.

0 голосов
/ 13 марта 2019

Так что вам нужна черта от Scalatest JAR в не тестовом коде. Я не уверен, почему это работало раньше, но для меня имеет смысл просто удалить % "test" из самой масштабной зависимости. Это сделает его доступным в compile, а все, что в compile, доступно и в test.

А для Scalactic я думаю, что основной вариант использования для него как отдельной зависимости - это когда вам это нужно в compile, но используйте только Scalatest в test (или вообще не используйте его). Если они оба нужны только для тестов (или для компиляции), Scalatest принесет с собой Scalactic.

Я попробовал "test-> compile", но это также не дает того, на что я надеялся ...

"test->compile" совпадает с "test":

Конфигурация без сопоставления (без "->") сопоставляется с "default" или "compile". -> требуется только при сопоставлении с конфигурацией, отличной от указанной.

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