(五)测试数据库

在使用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 byName = mUserDao.findUsersByName("george");
        assertThat(byName.get(0), equalTo(user));
    }
}

二、在主机上测试

Room使用SQLite支持库,它提供与Android Framework类中的接口匹配的接口。 此支持允许您传递支持库的自定义实现以测试数据库查询。

注意:即使此设置允许您的测试快速运行,也不建议这样做,因为您设备上运行的SQLite版本和用户设备可能与主机上的版本不匹配。

你可能感兴趣的:((五)测试数据库)