Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

186
Views
Compartir definición de CoroutineExecutorExtension

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.

over 4 years ago · Santiago Trujillo
1 answers
Answer question

0

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.

over 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!