Как вы делитесь классами между тестовыми конфигурациями с использованием SBT
Я выполнил инструкции по документации SBT для настройки тестовых конфигураций. У меня три тестовые конфигурации Test, IntegrationTest и AcceptanceTest. Поэтому мой каталог src выглядит следующим образом:
Мой вопрос в том, как настроить SBT для разделения классов между этими конфигурациями? Пример. У меня есть класс в конфигурации "it" для упрощения настройки базы данных и срыва. Один из моих приемочных тестов в конфигурации "прием" может использовать этот класс. Как сделать класс "этого" доступным для теста в "принятии"
Большое спасибо заранее.
Ответы
Ответ 1
Конфигурация может расширить другую конфигурацию для использования зависимостей и классов конфигурации. Например, в разделе настраиваемая тестовая конфигурация показано это определение для настраиваемой конфигурации:
lazy val FunTest = config("fun") extend(Test)
Часть extend
означает, что скомпилированные нормальные источники тестов будут находиться в пути к классам для fun
источников. В вашем случае объявите конфигурацию acceptance
для расширения конфигурации it
:
lazy val AcceptanceTest = config("acceptance") extend(IntegrationTest)
Ответ 2
Ниже описан подход: http://www.scala-sbt.org/release/docs/Detailed-Topics/Testing#additional-test-configurations-with-shared-sources
Ответ 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
.