#gradle
#gradle
Вопрос:
Я хочу создать библиотеку, от которой могут зависеть другие модули в моем проекте, но только для тестов. Я внимательно прочитал документацию Gradle и не смог найти, как это сделать. Это моя структура проекта:
gradle-example:
app:
src/main/kotlin ...
src/test/kotlin <- this is supposed to use 'com.example.SomeTestUtil'
testlib:
src/test/kotlin/com.example.SomeTestUtil
settings.gradle.kts:
rootProject.name = "gradle-example"
include("app")
include("testlib")
В модуле приложения я попытался добавить
dependencies {
testImplementation(project(:testlib"))
}
Но я получаю ошибку компиляции при попытке импортировать SomeTestUtil
app
тестовые классы в модуле.
Каков правильный способ объявить зависимость от модуля в том же проекте, который позволяет использовать тестовые источники в тестовом коде?
Чтобы уточнить, мы хотим создать библиотеку, которая может использоваться только другими модулями в рамках src/test
и не src/main
.
Комментарии:
1. Если у вас есть код, специфичный для теста, где-либо ниже
main
, вы делаете это неправильно.2. @MartinZeitler Я не уверен, что понимаю. Это именно та ситуация, которой я пытаюсь избежать, я хочу инкапсулировать тестовый код для тестирования исходных текстов только через общую тестовую библиотеку и никогда не позволять ему загрязнять какой-либо производственный код
Ответ №1:
По-видимому, это можно сделать с помощью https://docs.gradle.org/current/userguide/java_testing.html#sec:java_test_fixtures
- они могут видеть классы основного исходного набора
- источники тестов могут видеть классы тестовых приспособлений
Итак, изменения в примере в вопросе следующие:
- изменение
src/test
наsrc/testFixtures
- объявление зависимости как
testImplementation(testFixtures(project(":testlib")))
- Добавление
java-test-fixtures
плагина в модульbuild.gradle.kts
дляtestlib
модуля