Comencé a intentar usar kotlinx-coroutines-test ( https://github.com/Kotlin/kotlinx.coroutines/blob/master/core/kotlinx-coroutines-test/README.md ) en la prueba de unidad JUnit pero obtengo el siguiente error cuando llamo a Dispatchers.setMain()
java.lang.IllegalArgumentException: TestMainDispatcher is not set as main dispatcher, have Main[missing, cause=java.lang.AbstractMethodError: kotlinx.coroutines.test.internal.TestMainDispatcherFactory.createDispatcher()Lkotlinx/coroutines/MainCoroutineDispatcher;] instead. at kotlinx.coroutines.test.TestDispatchers.setMain(TestDispatchers.kt:22) Intenté llamar a Dispatchers.setMain(Dispatchers.Unconfined) y también pasar val mainThreadSurrogate = newSingleThreadContext("UI thread") . Parece que el problema no es de todos modos con el valor que se pasa, sino que se está tropezando en la prueba de mainDispatcher en el siguiente
public fun Dispatchers.setMain(dispatcher: CoroutineDispatcher) { require(dispatcher !is TestMainDispatcher) { "Dispatchers.setMain(Dispatchers.Main) is prohibited, probably Dispatchers.resetMain() should be used instead" } val mainDispatcher = Dispatchers.Main require(mainDispatcher is TestMainDispatcher) { "TestMainDispatcher is not set as main dispatcher, have $mainDispatcher instead." } mainDispatcher.setDispatcher(dispatcher) }Intente agregar core como una dependencia en su prueba. Resolvió el problema para mí.
testImplementation("org.jetbrains.kotlinx:kotlinx-coroutines-core:1.1.0")
Resultó que el problema era que estaba usando una versión anterior de kotlinx-coroutines-core . Cuando actualicé a v1.1.0, funcionó (¡gracias @vigit por ayudar a activar esa realización!)