Тестирование внутренних классов, сгенерированных kspAndroid

Форум для тех, кто программирует под Android
Ответить
Anonymous
 Тестирование внутренних классов, сгенерированных ksp

Сообщение Anonymous »

Недавно мы перенесли комнату с KAPT на KSP.
Когда включена настройка генерации кода Kotlin
extensions.configure {
arg("room.generateKotlin", "true")
}

Классы автоматической миграции генерируются как внутренние классы в папке build/generated/ksp.
К сожалению, это нарушает существующие модульные тесты, поскольку реализации автоматической миграции недоступны как KSP. генерирует классы как внутренние классы.
Я мог бы обойти проблему с помощью
@file:Suppress("invisible_reference", "invisible_member")

объявление в верхней части файла. Но это явно хакерская и небезопасная функция, которая, скорее всего, скоро будет удалена.
  • Можно ли решить эту проблему с помощью исходного кода Gradle в библиотеке Android модуль?
  • Можно ли дать указание комнате ksp сделать сгенерированные классы автомиграции общедоступными или добавить к ним аннотацию @VisibleForTesting?
Кто-нибудь нашел чистый решение этой проблемы?
Мой плагин конвенции выглядит так:

class AndroidRoomKspConventionPlugin : Plugin {

override fun apply(target: Project) {
with(target) {
pluginManager.apply("androidx.room")
pluginManager.apply("com.google.devtools.ksp")

extensions.configure {
arg("room.generateKotlin", "true")
}

extensions.configure {
// The schemas directory contains a schema file for each version of the Room database.
// This is required to enable Room auto migrations.
// See https://developer.android.com/reference ... oMigration.
schemaDirectory("$projectDir/schemas")
}

dependencies {
add("implementation", libs.findLibrary("ksp-symbol-processing").get())
add("api", libs.findBundle("room-api").get())
add(
"androidTestImplementation",
libs.findLibrary("androidx-room-testing").get()
)
add(
"testImplementation",
libs.findLibrary("androidx-room-testing").get()
)
add("ksp", libs.findLibrary("room-compiler").get())
}
}
}
}

версии:
kotlinVersion = "2.0.20"
roomVersion = "2.6.1"
kspVersion = "2.0.20-1.0.25"


Подробнее здесь: https://stackoverflow.com/questions/791 ... al-classes
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Android»