Nhà cung cấp nội dung kiểm thử

Nếu đang triển khai trình cung cấp nội dung để lưu trữ và truy xuất dữ liệu hoặc cho phép các ứng dụng khác truy cập vào dữ liệu, thì bạn nên kiểm thử trình cung cấp để đảm bảo rằng trình cung cấp đó không hoạt động theo cách không mong muốn. Bài học này mô tả cách kiểm thử các trình cung cấp nội dung công khai và cũng áp dụng cho các trình cung cấp mà bạn giữ riêng tư trong ứng dụng của mình.

Tạo chương trình kiểm thử tích hợp cho nhà cung cấp nội dung

Trình cung cấp nội dung cho phép bạn truy cập vào dữ liệu thực tế của người dùng. Vì vậy, điều quan trọng là phải đảm bảo rằng bạn kiểm thử trình cung cấp nội dung trong một môi trường kiểm thử riêng biệt. Phương pháp này cho phép bạn chỉ chạy với các phần phụ thuộc dữ liệu được đặt rõ ràng trong trường hợp kiểm thử. Điều này cũng có nghĩa là các bài kiểm thử của bạn không sửa đổi dữ liệu thực tế của người dùng. Ví dụ: bạn nên tránh viết một chương trình kiểm thử không thành công vì có dữ liệu còn lại từ lần kiểm thử trước đó. Tương tự, quy trình kiểm thử của bạn nên tránh thêm hoặc xoá thông tin liên hệ thực tế của một nhà cung cấp.

Để kiểm thử riêng trình cung cấp nội dung, hãy sử dụng lớp ProviderTestCase2. Với lớp này, bạn có thể sử dụng các lớp đối tượng mô phỏng của Android như IsolatedContextMockContentResolver để truy cập vào thông tin tệp và cơ sở dữ liệu mà không ảnh hưởng đến dữ liệu thực tế của người dùng.

Bạn nên viết chương trình kiểm thử tích hợp dưới dạng lớp kiểm thử JUnit 4. Để tìm hiểu thêm về cách tạo các lớp kiểm thử JUnit 4 và sử dụng câu nhận định JUnit 4, hãy xem phần Tạo lớp kiểm thử đơn vị cục bộ.

Để tạo bài kiểm thử tích hợp cho trình cung cấp nội dung, bạn phải thực hiện các bước sau:

  1. Tạo lớp kiểm thử làm lớp con của ProviderTestCase2.
  2. Chỉ định lớp AndroidJUnitRunnerKiểm thử AndroidX cung cấp làm trình chạy kiểm thử mặc định.
  3. Đặt đối tượng Context từ lớp ApplicationProvider. Hãy xem đoạn mã dưới đây để biết ví dụ.

Kotlin


@Throws(Exception::class)
override fun setUp() {
  super.setUp()
  context = ApplicationProvider.getApplicationContext<Context>()
}

Java


@Override
protected void setUp() throws Exception {
  super.setUp();
  setContext(ApplicationProvider.getApplicationContext());
}

Cách ProviderTestCase2 hoạt động

Bạn kiểm thử một nhà cung cấp có một lớp con của ProviderTestCase2. Lớp cơ sở này mở rộng AndroidTestCase, vì vậy, lớp này cung cấp khung kiểm thử JUnit cũng như các phương thức dành riêng cho Android để kiểm thử quyền cho ứng dụng. Tính năng quan trọng nhất của lớp này là khởi chạy, tạo ra môi trường kiểm thử tách biệt.

Khởi chạy

Việc khởi chạy được thực hiện trong hàm khởi tạo cho ProviderTestCase2 (các lớp con gọi trong hàm khởi tạo riêng). Hàm khởi tạo ProviderTestCase2 tạo một đối tượng IsolatedContext cho phép các thao tác đối với tệp và cơ sở dữ liệu nhưng mã hoá các hoạt động tương tác khác với hệ thống Android. Bản thân tệp và các thao tác với cơ sở dữ liệu diễn ra trong một thư mục cục bộ đối với thiết bị hoặc trình mô phỏng và có một tiền tố đặc biệt.

Sau đó, hàm khởi tạo sẽ tạo một MockContentResolver để dùng làm trình phân giải cho quá trình kiểm thử.

Cuối cùng, hàm khởi tạo sẽ tạo một thực thể của trình cung cấp đang được kiểm thử. Đây là một đối tượng ContentProvider thông thường, nhưng đối tượng này lấy tất cả thông tin môi trường của đối tượng này từ IsolatedContext, vì vậy, đối tượng này chỉ hoạt động trong môi trường thử nghiệm tách biệt. Tất cả kiểm thử được thực hiện trong lớp trường hợp kiểm thử đều chạy dựa trên đối tượng tách biệt này.

Bạn chạy kiểm thử tích hợp cho các trình cung cấp nội dung giống như cách chạy kiểm thử đơn vị được đo lường.

Nội dung cần kiểm thử

Dưới đây là một số nguyên tắc cụ thể để kiểm tra nhà cung cấp nội dung.

  • Kiểm thử bằng các phương thức trình phân giải: Mặc dù có thể tạo thực thể cho đối tượng nhà cung cấp trong ProviderTestCase2, nhưng bạn phải luôn kiểm thử bằng đối tượng trình phân giải thông qua URI thích hợp. Việc này đảm bảo rằng bạn đang kiểm thử trình cung cấp bằng cách thực hiện cùng một lượt tương tác mà một ứng dụng thông thường sẽ sử dụng.
  • Kiểm thử nhà cung cấp công khai dưới dạng hợp đồng: Nếu muốn công khai và cung cấp nhà cung cấp cho các ứng dụng khác, bạn nên kiểm thử dưới dạng hợp đồng. Sau đây là một số ví dụ về cách thực hiện:
    • Kiểm thử bằng các hằng số mà nhà cung cấp của bạn hiển thị công khai. Ví dụ: tìm các hằng số tham chiếu đến tên cột trong một trong các bảng dữ liệu của nhà cung cấp. Các giá trị này phải luôn là hằng số do nhà cung cấp xác định công khai.
    • Kiểm tra tất cả các URI mà nhà cung cấp của bạn cung cấp. Nhà cung cấp của bạn có thể cung cấp một số URI, mỗi URI tham chiếu đến một khía cạnh khác của dữ liệu.
    • Kiểm tra URI không hợp lệ. Bạn nên chủ động gọi trình cung cấp với một URI không hợp lệ và tìm lỗi. Một thiết kế nhà cung cấp tốt là gửi một IllegalArgumentException cho các URI không hợp lệ.
  • Kiểm thử các lượt tương tác tiêu chuẩn của nhà cung cấp: Hầu hết nhà cung cấp đều cung cấp 6 phương thức truy cập: query(), insert(), delete(), update(), getType()onCreate(). Bạn nên kiểm thử để đảm bảo tất cả các phương thức này đều hoạt động.
  • Kiểm thử logic nghiệp vụ: Nếu nhà cung cấp nội dung triển khai logic nghiệp vụ, thì bạn nên kiểm thử logic đó. Logic nghiệp vụ bao gồm việc xử lý các giá trị không hợp lệ, các phép tính số học hoặc tài chính, loại bỏ hoặc kết hợp các giá trị trùng lặp.