Mor*_*zov 5 multithreading android realm kotlin android-espresso
在每次浓缩咖啡测试之前,我都有一个注释@Before
,用于初始化RealmManager.realm
。
我的代码段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 {
errorOccurred = false
realm = Realm.getDefaultInstance()
} catch (e: Exception) {
errorOccurred = true
realm = Realm.getInstance(RealmConfiguration.Builder()
.schemaVersion(SCHEMA_VERSION).name(errorDbName).build())
e.log()
deleteRealmFile(realm.configuration.realmDirectory)
}
}
Run Code Online (Sandbox Code Playgroud)
但是当我运行测试时,出现下一个错误:
来自错误线程的领域访问。只能在创建对象的线程上访问领域对象
那么,如何在测试中正确初始化自己的境界?
我发现很有趣的解决方案之一,是创建一个虚假的init领域。
要从您的 UI 测试中操作 UI 线程的 Realm 实例,您需要使用instrumentation.runOnMainSync(() -> {...});
.
@Before
public void setup() {
Instrumentation instrumentation = InstrumentationRegistry.getInstrumentation();
instrumentation.runOnMainSync(new Runnable() {
@Override
public void run() {
// setup UI thread Realm instance configuration
}
});
}
Run Code Online (Sandbox Code Playgroud)
我做什么。我刚刚在我的 AppTools 中添加了下一个功能,它通过测试检查包:
fun isTestsSuite() = AppResources.appContext?.classLoader.toString().contains("tests")
Run Code Online (Sandbox Code Playgroud)
然后修改Realm的init:
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 {
errorOccurred = false
realm = Realm.getDefaultInstance()
} catch (e: Exception) {
errorOccurred = true
realm = Realm.getInstance(RealmConfiguration.Builder()
.schemaVersion(SCHEMA_VERSION).name(errorDbName).build())
e.log()
deleteRealmFile(realm.configuration.realmDirectory)
}
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
376 次 |
最近记录: |