使用Realm的测试方法
Testing method that uses Realm
我有一个使用 Realm 的数据库数据源。所以现在我想测试 class 但我面临一些关于如何使用固定装置以及如何模拟 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
我应该怎么做?
How to run Unit test in Realm Db using Roboelectric 表示,尚不支持 Roboelectric,因此您不能使用单元测试,只能在真实 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);
使用这个 f.ex。在 @BeforeClass
中(并记住在 @AfterClass
中 testRealm.close()
以获得良好的形式)。
我有一个使用 Realm 的数据库数据源。所以现在我想测试 class 但我面临一些关于如何使用固定装置以及如何模拟 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
我应该怎么做?
How to run Unit test in Realm Db using Roboelectric 表示,尚不支持 Roboelectric,因此您不能使用单元测试,只能在真实 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);
使用这个 f.ex。在 @BeforeClass
中(并记住在 @AfterClass
中 testRealm.close()
以获得良好的形式)。