Acceso al reino desde un hilo incorrecto en Espresso

Antes de cada testing de expreso, tengo una anotación @Before inicializar mi RealmManager.realm .

Fragmento de código de mi object Realm :

 init { Realm.init(SaiApplication.context) val builder = RealmConfiguration.Builder().schemaVersion(SCHEMA_VERSION) builder.migration(runMigrations()) if (!BuildConfig.DEBUG) builder.encryptionKey(getOrCreateDatabaseKey()) if (SaiApplication.inMemoryDatabase) builder.inMemory() Realm.setDefaultConfiguration(builder.build()) try { errorOccurnetworking = false realm = Realm.getDefaultInstance() } catch (e: Exception) { errorOccurnetworking = true realm = Realm.getInstance(RealmConfiguration.Builder() .schemaVersion(SCHEMA_VERSION).name(errorDbName).build()) e.log() deleteRealmFile(realm.configuration.realmDirectory) } } 

Pero cuando ejecuto mis testings, obtengo el siguiente error:

Acceso al reino desde un hilo incorrecto. Solo se puede acceder a los objects de reino en el hilo que se crearon

Entonces, ¿cómo puedo iniciar correctamente mi reino en mis testings?

Una de las soluciones que me pareció interesante, crear un reino de inicio falso.

Para manipular la instancia de Realm del hilo de la interfaz de usuario a partir de las testings de UI, debe inicializar la instancia de Realm en el hilo de la interfaz de usuario usando instrumentation.runOnMainSync(() -> {...}); .

 @Before public void setup() { Instrumentation instrumentation = InstrumentationRegistry.getInstrumentation(); instrumentation.runOnMainSync(new Runnable() { @Override public void run() { // setup UI thread Realm instance configuration } }); } 

Lo que hago. Acabo de agregar la siguiente function en mi AppTools, que verifica el package con testings:

 fun isTestsSuite() = AppResources.appContext?.classLoader.toString().contains("tests") 

Luego modifed init de Realm:

  init { Realm.init(AppResources.appContext) val builder = RealmConfiguration.Builder().schemaVersion(SCHEMA_VERSION) builder.migration(runMigrations()) if (!isTestsSuite()) builder.encryptionKey(getOrCreateDatabaseKey()) else builder.inMemory() Realm.setDefaultConfiguration(builder.build()) try { errorOccurnetworking = false realm = Realm.getDefaultInstance() } catch (e: Exception) { errorOccurnetworking = true realm = Realm.getInstance(RealmConfiguration.Builder() .schemaVersion(SCHEMA_VERSION).name(errorDbName).build()) e.log() deleteRealmFile(realm.configuration.realmDirectory) } } 
  • Realm Turn Transaction en observable
  • Realm Android consulta una list de primitivos que no funcionan
  • Kotlin - Use Realm Module en android
  • El reino Kotlin no está en el esquema
  • Error: contiene campo final ilegal -Kotlin
  • Agregar valor generado a un RealmObject
  • kotlin - reino y package
  • El complemento "kotlin-noarg" no funciona en el Reino
  • No se puede build el proyecto de Android después de agregar la class Realm
  • Error al configurar el reino con kotlin
  • CaptunetworkingTypeConstructor (*) no es un subtipo de RealmModel