He creado dos clases:
@ExperimentalCoroutinesApi open class InstantExecutorExtension : BeforeEachCallback, AfterEachCallback { override fun beforeEach(context: ExtensionContext?) { ArchTaskExecutor.getInstance() .setDelegate(object : TaskExecutor() { override fun executeOnDiskIO(runnable: Runnable) = runnable.run() override fun postToMainThread(runnable: Runnable) = runnable.run() override fun isMainThread(): Boolean = true }) } override fun afterEach(context: ExtensionContext?) { ArchTaskExecutor.getInstance().setDelegate(null) } }y
@ExperimentalCoroutinesApi class CoroutineExecutorExtension : InstantExecutorExtension() { private val testCoroutineDispatcher = TestCoroutineDispatcher() override fun beforeEach(context: ExtensionContext?) { super.beforeEach(context) Dispatchers.setMain(testCoroutineDispatcher) } override fun afterEach(context: ExtensionContext?) { super.afterEach(context) Dispatchers.resetMain() testCoroutineDispatcher.cleanupTestCoroutines() } } Estoy usando estas clases para escribir pruebas unitarias para métodos que usan rutinas y datos en vivo. El problema que tengo es que no se como compartir estas clases en diferentes modulos. Si los defino en la carpeta de test , puedo crear las clases, pero no son visibles en otros módulos. Si defino en la carpeta main hay errores de tiempo de compilación. ¿Qué puedo hacer para no tener que definir estas clases en todos los módulos?
ACTUALIZAR Para seguir la sugerencia de @Sam, he creado un módulo que contiene las dos clases en la carpeta:
.\unittest\src\testFixtures\java\com\name\terminal\unittest El archivo build.gradle de este módulo usa los complementos:
plugins { id 'com.android.library' id 'kotlin-android' id 'java-test-fixtures' } En el módulo donde quiero usar CoroutineExecutorExtension he importado el proyecto del módulo unittest con:
testImplementation(testFixtures(project(":unittest")))El problema es que las clases en la carpeta testFixtures no son visibles.
EDITAR
Este método no funciona para una biblioteca de Android. No puedo usar una biblioteca Java porque necesito poder incluir las dependencias de Androidx.
Si está utilizando Gradle, el complemento de accesorios de prueba es una solución adecuada. El complemento está integrado, por lo que simplemente puede agregar java-test-fixtures a su bloque de plugins .
plugins { `java-test-fixtures` } Esto crea automáticamente un nuevo conjunto de fuentes de testFixtures , junto con los conjuntos de fuentes main y test existentes que ya tiene. El código que escriba dentro src/testFixtures/kotlin será visible desde sus pruebas y tendrá acceso a todo en main . Todo lo que necesiten los accesorios de prueba (por ejemplo, las dependencias de kotlinx-coroutines o su marco de prueba) debe agregarse como dependencias de los accesorios de prueba .
También puede agregar dependencias en dispositivos de prueba de otro módulo. Por ejemplo, si module-b necesita usar los accesorios de prueba del module-a , entonces en el script de compilación de Gradle para module-b podría agregar:
dependencies { testImplementation(testFixtures(project(":module-a"))) }Los ejemplos que he dado son para secuencias de comandos de compilación de Kotlin, pero puede encontrar los equivalentes de Groovy en la documentación vinculada.