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) } } 
  • Escribir Daos del reino con transactions cerradas
  • El reino Kotlin no está en el esquema
  • Float es un campo no válido para la comparación de Realm
  • Cómo usar Realm en una biblioteca
  • Prueba de Android en kotlin de reino
  • El complemento "kotlin-noarg" no funciona en el Reino
  • ¿Cambiar notifications en Realm para objects internos?
  • Realm Turn Transaction en observable
  • la demostración del reino de Kotlin no se puede ejecutar
  • Realm Android consulta una list de primitivos que no funcionan
  • Kotlin y @Transient