Kiểm thử đơn vị bằng Glance

API kiểm thử đơn vị Glance cho phép bạn kiểm thử mã Glance mà không cần mở rộng khung hiển thị hoặc cần đến trình tự động hoá giao diện người dùng. Ví dụ: API kiểm thử đơn vị cho phép bạn xác minh các điều kiện, chẳng hạn như liệu các phần tử có nằm trong danh sách hay không hoặc liệu các hộp đã được đánh dấu hay chưa, bằng cách sử dụng các trình so khớp như hasContentDescriptionEqualTo hoặc isChecked.

API này có dung lượng nhẹ và yêu cầu ít bước thiết lập hơn, vì vậy, bạn có thể thực hiện quy trình phát triển dựa trên kiểm thử khi phát triển từng phần của tiện ích và sắp xếp chúng để cải thiện khả năng tái sử dụng mã.

Thiết lập

Các phần phụ thuộc cần thiết để sử dụng thư viện kiểm thử đơn vị được trình bày trong các ví dụ sau:

// Other Glance and Compose runtime dependencies.
...
testImplementation 'androidx.glance:glance-testing:1.1.1'
testImplementation 'androidx.glance:glance-appwidget-testing:1.1.1'
...
// You may include additional dependencies, such as Robolectric, if your test
// needs to set a LocalContext.

Cấu trúc kiểm thử

Sắp xếp các hàm có khả năng kết hợp bên ngoài lớp GlanceAppWidget để bật tính năng tái sử dụng mã và kiểm thử đơn vị. Giảm thiểu độ phức tạp của các đơn vị đang được kiểm thử càng nhiều càng tốt.

Bạn có thể nhắm mục tiêu đến một thành phần kết hợp kiểm thử bằng provideComposable và chạy các bài kiểm thử đơn vị trên một hoặc nhiều nút Glance bằng onNode hoặc onAllNodes tương ứng.

private const val FAKE_HEADLINE = "EXTRA! EXTRA! READ ALL ABOUT IT!"

class MyGlanceComposableTest {
    @Test
    fun myNewsItemComposable_largeSize_hasHeadline() = runGlanceAppWidgetUnitTest {
        // Set the composable to test
        provideComposable {
            MyNewsItemComposable(FAKE_HEADLINE)
        }

        // Perform assertions
        onNode(hasTestTag("headline"))
            .assertHasText(FAKE_HEADLINE)
    }


    @Composable
    fun MyNewsItemComposable(headline: String) {
        Row {
            Text(
                text = headline,
                modifier = GlanceModifier.semantics { testTag = "headline" },
            )
        }
    }
}

Đặt bối cảnh và kích thước cho bài kiểm thử

Nếu hàm composable của bạn đọc bối cảnh bằng phương thức LocalContext.current(), thì bạn phải đặt bối cảnh bằng setContext(). Nếu không thì bước này là không bắt buộc.

Bạn có thể sử dụng bất kỳ khung kiểm thử đơn vị Android dựa trên JVM nào, chẳng hạn như Roboletric, để cung cấp bối cảnh.

Nếu hàm composable truy cập vào LocalSize, hãy đặt kích thước dự kiến cho bài kiểm thử trước khi cung cấp một thành phần kết hợp trong bài kiểm thử. Kích thước mặc định là 349.dp x 455.dp, tương đương với một tiện ích 5x4 hiển thị trên thiết bị Pixel 4 ở chế độ dọc.

  • Nếu AppWidget sử dụng sizeMode == Single, bạn có thể đặt giá trị này thành minWidthminHeight trong tệp info.xml của tiện ích.
  • Nếu AppWidget sử dụng sizeMode == Exact, bạn có thể xác định các kích thước cần kiểm thử theo cách tương tự như cách xác định kích thước cho tiện ích và xác định các kích thước ngang và dọc mà tiện ích có thể xuất hiện và kiểm thử cho chúng.
  • Nếu AppWidget sử dụng sizeMode == Responsive, bạn có thể đặt giá trị này thành một trong các kích thước trong danh sách mà bạn cung cấp khi chỉ định sizeMode.

Thời lượng mặc định cho thời gian chờ kiểm thử là 1 giây, nhưng bạn có thể truyền thời lượng tuỳ chỉnh làm đối số cho phương thức runGlanceAppWidgetUnitTest nếu cơ sở hạ tầng kiểm thử của bạn thực thi một thời gian chờ khác.

Để biết thêm thông tin và mã mẫu, hãy xem tài liệu tham khảo về runGlanceAppWidgetUnitTest.