Hoạt động đóng vai trò là vùng chứa cho mọi tương tác của người dùng trong ứng dụng của bạn, vì vậy bạn cần kiểm thử cách các hoạt động của ứng dụng hoạt động ở cấp thiết bị các sự kiện như sau:
- Một ứng dụng khác, chẳng hạn như ứng dụng dành cho điện thoại của thiết bị, làm gián đoạn hoạt động trong ứng dụng đó.
- Hệ thống sẽ huỷ rồi tạo lại hoạt động của bạn.
- Người dùng đặt hoạt động của bạn trong một môi trường cửa sổ mới, chẳng hạn như hình trong hình (PIP) hoặc nhiều cửa sổ.
Cụ thể, bạn phải đảm bảo hoạt động của bạn hoạt động chính xác trong các sự kiện được mô tả trong Hoạt động Lifecycle.
Hướng dẫn này mô tả cách đánh giá khả năng duy trì dữ liệu của ứng dụng tính toàn vẹn và trải nghiệm tốt cho người dùng khi các hoạt động của ứng dụng chuyển đổi thông qua các trạng thái khác nhau trong vòng đời của chúng.
Thúc đẩy trạng thái của một hoạt động
Một khía cạnh chính của việc kiểm thử hoạt động của ứng dụng bao gồm việc đặt
hoạt động ở các tiểu bang cụ thể. Để định nghĩa điều này trong quá trình kiểm thử, hãy sử dụng
các bản sao của ActivityScenario
,
thuộc
Thư viện Kiểm thử AndroidX. Khi sử dụng lớp này, bạn có thể
đặt hoạt động của bạn ở những trạng thái mô phỏng sự kiện ở cấp thiết bị.
ActivityScenario
là API đa nền tảng mà bạn có thể sử dụng trong kiểm thử đơn vị cục bộ
cũng như các thử nghiệm tích hợp trên thiết bị. Trên thiết bị thực hoặc thiết bị ảo,
ActivityScenario
cung cấp tính an toàn cho luồng, đồng bộ hoá các sự kiện giữa
luồng đo lường của kiểm thử và luồng chạy hoạt động đang được kiểm thử.
API này đặc biệt phù hợp để đánh giá cách một hoạt động trong hoạt động kiểm thử khi mã bị huỷ hoặc được tạo. Phần này trình bày các kỹ thuật phổ biến nhất các trường hợp sử dụng liên quan đến API này.
Tạo một hoạt động
Để tạo hoạt động đang được kiểm thử, hãy thêm mã xuất hiện trong đoạn mã sau:
@RunWith(AndroidJUnit4::class) class MyTestSuite { @Test fun testEvent() { launchActivity<MyActivity>().use { } } }
Sau khi tạo hoạt động, ActivityScenario
sẽ chuyển đổi hoạt động đó sang
Trạng thái RESUMED
. Trạng thái này cho biết hoạt động của bạn đang chạy và đang
hiển thị cho người dùng. Ở trạng thái này, bạn có thể thoải mái tương tác với
Các phần tử View
sử dụng quy trình kiểm thử giao diện người dùng Espresso.
Bạn nên gọi close
trên hoạt động khi kiểm thử
hoàn tất. Thao tác này sẽ dọn dẹp các tài nguyên liên quan và cải thiện
độ ổn định của các bài kiểm thử. ActivityScenario
triển khai Closeable
, vì vậy, bạn có thể
áp dụng phần mở rộng use
hoặc try-with-resources
trong lập trình Java
để hoạt động tự động đóng.
Ngoài ra, bạn có thể sử dụng ActivityScenarioRule
để tự động gọi
ActivityScenario.launch
trước mỗi lần kiểm tra và ActivityScenario.close
khi phân tách thử nghiệm. Ví dụ sau đây minh hoạ cách xác định một quy tắc và lấy một giá trị
của một tình huống từ nó:
@RunWith(AndroidJUnit4::class) class MyTestSuite { @get:Rule var activityScenarioRule = activityScenarioRule<MyActivity>() @Test fun testEvent() { val scenario = activityScenarioRule.scenario } }
Chuyển hoạt động sang trạng thái mới
Để chuyển hoạt động sang một trạng thái khác, chẳng hạn như CREATED
hoặc STARTED
, hãy gọi
moveToState()
. Thao tác này mô phỏng một tình huống trong đó hoạt động của bạn
đã dừng hoặc tạm dừng tương ứng do bị gián đoạn bởi một ứng dụng khác hoặc
hành động của hệ thống.
Ví dụ về cách sử dụng moveToState()
xuất hiện trong đoạn mã sau:
@RunWith(AndroidJUnit4::class) class MyTestSuite { @Test fun testEvent() { launchActivity<MyActivity>().use { scenario -> scenario.moveToState(State.CREATED) } } }
Xác định trạng thái hoạt động hiện tại
Để xác định trạng thái hiện tại của một hoạt động đang được kiểm thử, hãy lấy giá trị của
Trường state
trong đối tượng ActivityScenario
. Điều này đặc biệt hữu ích
để kiểm tra trạng thái của một hoạt động đang được kiểm thử xem hoạt động đó có chuyển hướng đến
một hoạt động khác hoặc tự kết thúc, như được minh hoạ trong mã sau
snippet:
@RunWith(AndroidJUnit4::class) class MyTestSuite { @Test fun testEvent() { launchActivity<MyActivity>().use { scenario -> scenario.onActivity { activity -> startActivity(Intent(activity, MyOtherActivity::class.java)) } val originalActivityState = scenario.state } } }
Tạo lại hoạt động
Khi một thiết bị sắp hết tài nguyên, hệ thống có thể huỷ bỏ một hoạt động,
yêu cầu ứng dụng tạo lại hoạt động đó khi người dùng quay lại ứng dụng.
Để mô phỏng các điều kiện này, hãy gọi recreate()
:
@RunWith(AndroidJUnit4::class) class MyTestSuite { @Test fun testEvent() { launchActivity<MyActivity>().use { scenario -> scenario.recreate() } } }
Lớp ActivityScenario
duy trì trạng thái thực thể đã lưu của hoạt động và
bất kỳ đối tượng nào được chú thích bằng @NonConfigurationInstance
. Các đối tượng này sẽ tải
vào thực thể mới của hoạt động đang được kiểm thử.
Truy xuất kết quả hoạt động
Để nhận mã kết quả hoặc dữ liệu liên kết với một hoạt động đã kết thúc, hãy lấy
giá trị của trường result
trong đối tượng ActivityScenario
, như minh hoạ trong
đoạn mã sau:
@RunWith(AndroidJUnit4::class) class MyTestSuite { @Test fun testResult() { launchActivity<MyActivity>().use { onView(withId(R.id.finish_button)).perform(click()) // Activity under test is now finished. val resultCode = scenario.result.resultCode val resultData = scenario.result.resultData } } }
Kích hoạt các hành động trong hoạt động
Tất cả các phương thức trong ActivityScenario
đều đang chặn lệnh gọi, vì vậy, API này yêu cầu
bạn để chạy chúng trong luồng đo lường.
Để kích hoạt các hành động trong hoạt động đang được kiểm thử, hãy dùng trình so khớp khung hiển thị Espresso để tương tác với các phần tử trong khung hiển thị của bạn:
@RunWith(AndroidJUnit4::class) class MyTestSuite { @Test fun testEvent() { launchActivity<MyActivity>().use { onView(withId(R.id.refresh)).perform(click()) } } }
Tuy nhiên, nếu cần gọi một phương thức trên chính hoạt động đó, bạn có thể làm như vậy
một cách an toàn bằng cách triển khai ActivityAction
:
@RunWith(AndroidJUnit4::class) class MyTestSuite { @Test fun testEvent() { launchActivity<MyActivity>().use { scenario -> scenario.onActivity { activity -> activity.handleSwipeToRefresh() } } } }