Kiểm thử và gỡ lỗi cơ sở dữ liệu

Bạn cần xác minh tính ổn định của cơ sở dữ liệu trong ứng dụng và dữ liệu của người dùng khi tạo cơ sở dữ liệu bằng thư viện dữ liệu cố định Room. Trang này thảo luận về cách kiểm thử cơ sở dữ liệu của bạn và thực hiện các bước gỡ lỗi để giúp cơ sở dữ liệu vượt qua các đợt kiểm thử.

Kiểm thử cơ sở dữ liệu

Có 2 cách để kiểm thử cơ sở dữ liệu của bạn:

  • Trên thiết bị Android.
  • Trên máy phát triển của máy chủ lưu trữ (không khuyến nghị).

Để biết thông tin về kiểm thử dành riêng cho hoạt động di chuyển cơ sở dữ liệu, xem bài viết Kiểm thử hoạt động di chuyển.

Kiểm thử trên thiết bị Android

Phương pháp tiếp cận được khuyến nghị để kiểm thử việc triển khai cơ sở dữ liệu là ghi kiểm thử JUnit chạy trên thiết bị Android. Vì các kiểm thử này không yêu cầu tạo hoạt động nên sẽ có tốc độ thực thi nhanh hơn so với kiểm thử giao diện người dùng.

Khi thiết lập kiểm thử, bạn nên tạo một phiên bản trong bộ nhớ của cơ sở dữ liệu để các kiểm thử mang tính khép kín hơn, như trong ví dụ sau:

Kotlin

@RunWith(AndroidJUnit4::class)
class SimpleEntityReadWriteTest {
    private lateinit var userDao: UserDao
    private lateinit var db: TestDatabase

    @Before
    fun createDb() {
        val context = ApplicationProvider.getApplicationContext<Context>()
        db = Room.inMemoryDatabaseBuilder(
                context, TestDatabase::class.java).build()
        userDao = db.getUserDao()
    }

    @After
    @Throws(IOException::class)
    fun closeDb() {
        db.close()
    }

    @Test
    @Throws(Exception::class)
    fun writeUserAndReadInList() {
        val user: User = TestUtil.createUser(3).apply {
            setName("george")
        }
        userDao.insert(user)
        val byName = userDao.findUsersByName("george")
        assertThat(byName.get(0), equalTo(user))
    }
}

Java

@RunWith(AndroidJUnit4.class)
public class SimpleEntityReadWriteTest {
    private UserDao userDao;
    private TestDatabase db;

    @Before
    public void createDb() {
        Context context = ApplicationProvider.getApplicationContext();
        db = Room.inMemoryDatabaseBuilder(context, TestDatabase.class).build();
        userDao = db.getUserDao();
    }

    @After
    public void closeDb() throws IOException {
        db.close();
    }

    @Test
    public void writeUserAndReadInList() throws Exception {
        User user = TestUtil.createUser(3);
        user.setName("george");
        userDao.insert(user);
        List<User> byName = userDao.findUsersByName("george");
        assertThat(byName.get(0), equalTo(user));
    }
}

Kiểm thử trên máy chủ của bạn

Room sử dụng Thư viện hỗ trợ SQLite,. Thư viện này cung cấp giao diện phù hợp với giao diện trong các lớp Khung Android. Dịch vụ hỗ trợ này cho phép bạn truyền các phương thức triển khai tuỳ chỉnh của thư viện hỗ trợ để kiểm thử các truy vấn cơ sở dữ liệu.

Kiểm thử hoạt động di chuyển

Room hỗ trợ hoạt động di chuyển cơ sở dữ liệu dần dần để giữ lại dữ liệu ứng dụng hiện có trong trường hợp bản cập nhật ứng dụng thay đổi giản đồ cơ sở dữ liệu. Tuy nhiên, hoạt động di chuyển được xác định không chính xác có thể khiến ứng dụng của bạn gặp sự cố. Bạn cần kiểm thử hoạt động di chuyển cơ sở dữ liệu Room.

Gỡ lỗi cơ sở dữ liệu

Bạn có thể sử dụng một số công cụ và quy trình để gỡ lỗi cơ sở dữ liệu của mình.

Sử dụng Trình kiểm tra cơ sở dữ liệu

Ở Android Studio 4.1 trở lên, Trình kiểm tra cơ sở dữ liệu cho phép bạn kiểm tra, truy vấn và sửa đổi cơ sở dữ liệu của ứng dụng trong khi ứng dụng đang chạy. Trình kiểm tra cơ sở dữ liệu tương thích với phiên bản SQLite đi kèm với Android và bao gồm các tính năng đặc biệt để sử dụng với Room:

  • Sử dụng các thao tác định hướng (gutter) để nhanh chóng chạy truy vấn từ các lớp DAO.
  • Xem ngay thông tin cập nhật trực tiếp trong Trình kiểm tra cơ sở dữ liệu khi ứng dụng đang chạy của bạn thay đổi dữ liệu.

Để tìm hiểu thêm về Trình kiểm tra cơ sở dữ liệu, xem bài viết Gỡ lỗi cơ sở dữ liệu bằng Trình kiểm tra cơ sở dữ liệu.

Kết xuất dữ liệu từ dòng lệnh

SDK Android có một công cụ cơ sở dữ liệu sqlite3 để kiểm tra cơ sở dữ liệu của ứng dụng. Công cụ này bao gồm các lệnh như .dump để in (print) nội dung của bảng và .schema để in câu lệnh SQL CREATE cho bảng hiện có.

Bạn cũng có thể thực thi các lệnh SQLite từ dòng lệnh, như trong đoạn mã sau:

adb -s emulator-5554 shell
sqlite3 /data/data/your-app-package/databases/rssitems.db

Để biết thêm thông tin, xem tài liệu về dòng lệnh sqlite3, có trên trang web SQLite.

Tài nguyên khác

Để tìm hiểu thêm về hoạt động kiểm thử và gỡ lỗi cơ sở dữ liệu Room, xem các tài nguyên bổ sung sau:

Bài đăng trên blog

Video