Как вы делитесь классами между тестовыми конфигурациями с использованием SBT

Я выполнил инструкции по документации SBT для настройки тестовых конфигураций. У меня три тестовые конфигурации Test, IntegrationTest и AcceptanceTest. Поэтому мой каталог src выглядит следующим образом:

  • SRC/
    • принятие /
      • scala/
    • он /
      • scala/
    • тест /
      • scala/

Мой вопрос в том, как настроить SBT для разделения классов между этими конфигурациями? Пример. У меня есть класс в конфигурации "it" для упрощения настройки базы данных и срыва. Один из моих приемочных тестов в конфигурации "прием" может использовать этот класс. Как сделать класс "этого" доступным для теста в "принятии"

Большое спасибо заранее.

Ответ 1

Конфигурация может расширить другую конфигурацию для использования зависимостей и классов конфигурации. Например, в разделе настраиваемая тестовая конфигурация показано это определение для настраиваемой конфигурации:

lazy val FunTest = config("fun") extend(Test)

Часть extend означает, что скомпилированные нормальные источники тестов будут находиться в пути к классам для fun источников. В вашем случае объявите конфигурацию acceptance для расширения конфигурации it:

lazy val AcceptanceTest = config("acceptance") extend(IntegrationTest)

Ответ 3

SBT использует макет каталога по умолчанию Maven.

Он будет распознавать папки ниже src/test/scala для компиляции вместе с src/main/scala.

Итак, если вы переместите другие папки под src/test/scala, SBT скомпилирует их, и вы сможете совместно использовать код между ними. например:.

└── scala
    ├── acceptance
    │   └── scala
    │       └── Acceptance.scala
    ├── it
    │   └── scala
    │       └── IT.scala
    └── Test.scala

Запуск sbt test скомпилирует все три файла в каталоге. Таким образом, с помощью этого Acceptance ссылайтесь и можете создать новый класс ИТ, например.

Ответ 4

В случае, если вы хотите придерживаться предопределенных конфигураций вместо определения новых, и поскольку Test и IntegrationTest расширяют время Runtime (можно было бы ожидать, что IntegrationTest расширит Test …), вы можете использовать следующее:

dependencyClasspath in IntegrationTest := (dependencyClasspath in IntegrationTest).value ++ (exportedProducts in Test).value

Это должно поместить все классы, которые вы определили в Test в класс IntegrationTest.