【问题标题】:Testing method that uses Realm使用 Realm 的测试方法
【发布时间】:2016-10-27 07:58:55
【问题描述】:

我有一个使用 Realm 的数据库数据源。所以现在我想测试那个类,但我面临一些关于如何使用固定装置和如何模拟 Realm 的问题。 我的数据库数据源如下所示:

public class DatabaseDataSource {
    private Realm realm;

    public DatabaseDataSource(Realm realm) {
        this.realm = realm;
    }


    public Observable<RealmResults> getContacts(String firstName, String lastName, String city, String zipCode) {

        final RealmQuery realmQuery = realm.where(Contact.class);
        if(!TextUtils.isEmpty(firstName)) {
            realmQuery.contains("firstName", firstName);
        }
        if(!TextUtils.isEmpty(lastName)) {
            realmQuery.contains("lastName", lastName));
        }
        if(!TextUtils.isEmpty(city)) {
            realmQuery.contains("city", city);
        }
        if(!TextUtils.isEmpty(zipCode)) {
            realmQuery.contains("zipCode", zipCode);
        }

        return realmQuery.findAll()
                    .asObservable();
    }
}

我正在使用 Robolectrics 进行其他测试,在这种情况下,我希望在我的模拟领域中有一个联系人列表,以便我可以检查过滤是否正常工作。我怎样才能做到这一点? 我试过这样做:

@RunWith(RobolectricTestRunner.class)
@Config(manifest=Config.NONE)
public class DatabaseDataSourceTest extends BaseTest {


    private DatabaseDataSource databaseDataSource;

    Realm realm;

    @Before
    public void setup() throws Exception {

        Realm.init(RuntimeEnvironment.application.getApplicationContext());
        Realm.setDefaultConfiguration(new RealmConfiguration.Builder().build());
        realm = Realm.getDefaultInstance();

        databaseDataSource = new DatabaseDataSource(realm);
    }

    @Test
    public void getContacts_filterByName() {
    databaseDataSource.getContacts("testName", null, null, null);
        // I don't know what to do here
    }

}

但我在执行此操作时遇到以下异常:

Realm.init(RuntimeEnvironment.application.getApplicationContext());

java.lang.UnsatisfiedLinkError: Can't load library: /var/folders/kc/76n8494x5cd2mtx340f27xch0000gn/T/android-tmp-robolectric409019390257818503/app_lib/librealm-jni.dylib

我该怎么做?

【问题讨论】:

    标签: android mockito realm powermock android-testing


    【解决方案1】:

    How to run Unit test in Realm Db using Roboelectric 说,Roboelectric 还不支持,所以你不能使用单元测试,只能在真实的 android 设备上进行仪器测试。

    所有测试都可以在一个线程上运行,测试中不需要在 rx 中。

    【讨论】:

      【解决方案2】:

      https://medium.com/@q2ad/android-testing-realm-2dc1e1c94ee1 有一个很好的解决方案:不要模拟Realm,只使用一个临时领域:

      RealmConfiguration testConfig = 
         new RealmConfiguration.Builder().
            inMemory().
            name("test-realm").build();
      
      Realm testRealm = Realm.getInstance(testConfig);
      

      使用这个 f.ex。在@BeforeClass 中(并记住testRealm.close()@AfterClass 中以获得良好的形式)。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-07-22
        • 2016-03-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-12-18
        相关资源
        最近更新 更多