Как IntelliJ (или sbt-структура) идентифицирует источники тестов? - PullRequest
0 голосов
/ 05 мая 2018

Фон

Я создал template-scala-project , который, помимо прочего, определяет конфигурации FunctionalTest и AcceptanceTest (в дополнение к IntegrationTest, который предоставляется SBT).

Таким образом, соответствующие биты структуры каталогов:

src/main/scala - compile sources - Compile
src/test/scala - test sources - Test
src/it/scala - it sources - IntegrationTest
src/ft/scala - ft sources - FunctionalTest
src/at/scala - at sources - AcceptanceTest

Поведение в SBT

Я могу запустить только функциональные тесты, например, так:

фт: тест

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

Поведение в IntelliJ

IntelliJ признает, что src/test/scala и src/it/scala являются тестовыми источниками. В IntelliJ нет различий между ними, я имею в виду: нет различий между источниками тестов и источниками тестов интеграции, но это нормально. Все, что мне нужно, это то, что src/it/scala признан тестовыми источниками. И это работает так.

Однако IntelliJ не распознает src/ft/scala в качестве тестовых источников; IntelliJ не распознает src/at/scala в качестве тестовых источников.

Я проверил файл XML, созданный sbt-структурой, но не смог понять шаблон или логику, стоящую за ним. Однако (и, очевидно,!) src/ft/scala и src/at/scala должны отображаться под <configuration id="test">, чтобы иметь право считаться источниками для тестирования.

Вопрос

Чтобы проверить мою гипотезу выше, я хотел бы заставить src/ft/scala появляться под <configuration id="test">, используя «что-то» в файле build.sbt. Как мне это сделать?

Ответы [ 2 ]

0 голосов
/ 07 мая 2018

После некоторых экспериментов я, по-видимому, нашел что-то, что работает достаточно хорошо. Я не могу утверждать, что нашел решение, но, по крайней мере, оно работает так, как я и ожидал: IntelliJ распознает FunctionalTest (тестовые) источники и AcceptanceTest (тестовые) источники так же, как распознает Test источники и IntegrationTest источники.

Ответ:

Создание конфигурации, которая расширяет Runtime и Test. Таким образом, src/ft/scala появляется под <configuration id="test">, поскольку файл XML создается sbt-structure. Смотрите пример ниже для конфигурации FunctionalTest:

lazy val FunctionalTest = Configuration.of("FunctionalTest", "ft") extend (Runtime, Test)

В качестве бонуса я показываю ниже некоторые другие настройки, которые я считаю полезными для связи с конфигурацией FunctionalTest:

lazy val forkSettings: Seq[Setting[_]] =
  Seq(
    fork in ThisScope := false,
    parallelExecution in ThisScope := false,
  )

lazy val ftSettings: Seq[Setting[_]] =
  inConfig(FunctionalTest)(Defaults.testSettings ++ forkSettings ++
    Seq(
      unmanagedSourceDirectories   in FunctionalTest ++= (sourceDirectories   in Test).value,
      unmanagedResourceDirectories in FunctionalTest ++= (resourceDirectories in Test).value,
    ))

Я также сделал нечто подобное для конфигурации AcceptanceTest.

Вы можете найти проект, который осуществляет такие конфигурации по адресу: http://github.com/frgomes/template-scala-project

0 голосов
/ 05 мая 2018

Если вы хотите, чтобы каталог в IntelliJ считался каталогом Test Source, вы можете настроить его как таковой, просто щелкнув по нему правой кнопкой мыши и выбрав Mark Directory As > Test Sources Root

Это изменяет конфигурацию структуры вашего проекта, чтобы IntelliJ знал, что там находятся тесты. То же самое относится и к вашим ресурсам, если они должны быть отмечены соответствующим образом.

С учетом сказанного, я полагаю, что не уверен на 100%, распознает ли IntelliJ sbt, что распознает это и запускает их соответствующим образом, но я ожидаю этого.

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