当前位置:  开发笔记 > 编程语言 > 正文

在Android下测试Realm

如何解决《在Android下测试Realm》经验,为你挑选了2个好方法。

我有一个Android应用程序,我使用Realm来保存数据.我现在想利用Realm为这个应用程序编写一个单元测试.

但是,我不希望单元测试干扰我现有的Realm数据.所以我想为我的测试实例生成不同的Realm文件.我不在乎他们是否有不同的名称,或者存储在不同的目录中.

我试过用a RenamingDelegatingContext,但没有成功.根据https://groups.google.com/forum/#!msg/realm-java/WyHJHLOqK2c/WJFYvglIGk0J getInstance()仅使用Contextto调用getFilesDir(),这似乎没有覆盖该getFilesDir()方法,所以我最终使用我的实时数据测试.

接下来我尝试使用IsolatedContext,但IsolatedContext.getFilesDir()返回null,所以这也没有成功.

最后,我尝试编写一个类扩展RenamingDelegatingContext,覆盖getFilesDir(),返回一个不同的目录供Realm使用.我使用AndroidStudio的DeviceMonitor创建了目录,但是当我尝试使用这个上下文时,Realm失败了io.realm.exceptions.RealmIOException: Failed to open . Permission denied. open() failed: Permission denied.

有没有人知道是否有可能在不影响实时数据的情况下测试Realm?



1> Benjamin Sch..:

我实际上非常盲目,只需在测试设置期间为RealmDatabase使用不同的名称,同时生成其配置,该解决方案非常简单.我的解决方案现在看起来如下:

RealmConfiguration config = new RealmConfiguration.Builder(getContext()).
        schemaVersion(1).
        migration(new CustomMigration()).
        name("test.realm").
        inMemory().
        build();
Realm.setDefaultConfiguration(config);



2> Christian Me..:

如果您使用的是JUnit4,则可以使用TemporaryFolder规则生成测试文件夹:https://garygregory.wordpress.com/2010/01/20/junit-tip-use-rules-to-manage-temporary-files-and -folders /

@Rule
public TemporaryFolder testFolder = new TemporaryFolder();

@Test
public void testRealm() throws IOException {
    File tempFolder = testFolder.newFolder("realmdata");
    RealmConfiguration config = new RealmConfiguration.Builder(tempFolder).build();

    Realm realm = Realm.getInstance(config);
    // Do test
    realm.close(); // Important
}

推荐阅读
郑谊099_448
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有