使用Realm的测试方法



我有一个使用Realm的数据库数据源。所以现在我想测试这个类,但我面临着一些关于如何使用fixture和如何模拟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

我该怎么做?

如何使用Roboelectric在Realm Db中运行单元测试说,Roboelect还不支持,所以你不能使用单元测试,只能在真正的android设备上进行仪器测试。

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

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

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

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

相关内容

  • 没有找到相关文章

最新更新