我有一个 Android 应用程序,我在其中使用 Realm 来保存数据。我现在想使用 Realm 为这个应用程序编写单元测试。
但是,我不希望单元测试干扰我现有的 Realm 数据。所以我想为我的测试实例生成不同的 Realm 文件。我不在乎它们是否有不同的名称,或者存储在不同的目录中。
我尝试使用 RenamingDelegatingContext
,但没有成功。根据https://groups.google.com/forum/#!msg/realm-java/WyHJHLOqK2c/WJFYvglIGk0J getInstance()
仅使用 Context
调用 getFilesDir()
,这似乎并没有覆盖 getFilesDir()
方法,所以我最终使用我的实时数据进行测试。
接下来我尝试使用 IsolatedContext
,但是 IsolatedContext.getFilesDir()
返回 null
,所以这也没有成功。
最后,我尝试写了一个扩展RenamingDelegatingContext
的类,覆盖getFilesDir()
,返回一个不同的目录给Realm使用。我使用 AndroidStudio 的 DeviceMonitor 创建了目录,但是当我尝试使用此上下文时,Realm 失败并出现 io.realm.exceptions.RealmIOException: Failed to open 。没有权限。 open() 失败:权限被拒绝
。
有谁知道是否有可能在不影响实时数据的情况下测试 Realm?
最佳答案
我实际上很盲目,解决方案非常简单,只需在测试设置期间为 RealmDatabase 使用不同的名称,同时生成其配置。我的解决方案现在如下所示:
RealmConfiguration config = new RealmConfiguration.Builder(getContext()).
schemaVersion(1).
migration(new CustomMigration()).
name("test.realm").
inMemory().
build();
Realm.setDefaultConfiguration(config);
关于java - Android下的测试境界,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34216044/