在使用Room持久性库创建数据库时,验证应用程序数据库和用户数据的稳定性非常重要。
有两种方法可以测试您的数据库:
- 在Android设备上。
- 在您的主机开发机器上(不推荐)。
有关特定于数据库迁移的测试的信息,请参阅测试迁移。
注意:在为您的应用程序运行测试时,Room允许您创建DAO类的模拟实例。 这样,如果您没有测试数据库本身,则无需创建完整数据库。 此功能是可行的,因为您的DAO不会泄漏数据库的任何详细信息。
一、在Android设备上测试
测试数据库实现的推荐方法是编写在Android设备上运行的JUnit测试。 因为这些测试不需要创建活动,所以它们的执行速度应该比UI测试快。
在设置测试时,您应该创建数据库的内存版本,以使测试更加密集,如以下示例所示:
@RunWith(AndroidJUnit4.class)
public class SimpleEntityReadWriteTest {
private UserDao mUserDao;
private TestDatabase mDb;
@Before
public void createDb() {
Context context = ApplicationProvider.getApplicationContext();
mDb = Room.inMemoryDatabaseBuilder(context, TestDatabase.class).build();
mUserDao = mDb.getUserDao();
}
@After
public void closeDb() throws IOException {
mDb.close();
}
@Test
public void writeUserAndReadInList() throws Exception {
User user = TestUtil.createUser(3);
user.setName("george");
mUserDao.insert(user);
List<User> byName = mUserDao.findUsersByName("george");
assertThat(byName.get(0), equalTo(user));
}
}
二、在主机上测试
Room使用SQLite支持库,它提供与Android Framework类中的接口匹配的接口。 此支持允许您传递支持库的自定义实现以测试数据库查询。
注意:即使此设置允许您的测试快速运行,也不建议这样做,因为您设备上运行的SQLite版本和用户设备可能与主机上的版本不匹配。
网友评论