java - Android下的测试境界

标签 java android unit-testing realm

我有一个 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/

相关文章:

java - 以编程方式在垂直 LinearLayout 内添加约束布局?

unit-testing - 我应该测试私有(private)方法还是只测试公共(public)方法?

java - 通过SDK为所有Principal添加AWS SQS权限

java - 如何在 Heroku 中从 java 程序编译 java 文件

java - 实例化泛型类时出现 NoSuchMethodException

android - Drawable.createFromResourceStream() 中的异常——仅限 HTC?

android - 在 Opentok 发布者流的底部添加名称和图像,默认情况下它应该在订阅者端可见

android - osmdroid GoogleTilesOverlay 平滑调整大小缩放

ios - XCTestExpectation 在单元测试中的正确时间/位置完成方法调用?

unit-testing - 单元测试命名最佳实践