Khung thử nghiệm Espresso - Kiến trúc
Trong chương này, chúng ta hãy tìm hiểu các thuật ngữ của khung thử nghiệm espresso, cách viết một trường hợp thử nghiệm espresso đơn giản và quy trình hoặc kiến trúc hoàn chỉnh của khung thử nghiệm espresso.
Tổng quat
Espresso cung cấp một số lượng lớn các lớp để kiểm tra giao diện người dùng và sự tương tác của người dùng với một ứng dụng Android. Chúng có thể được nhóm thành năm loại như được chỉ định bên dưới:
Á hậu JUnit
Khung thử nghiệm Android cung cấp một Á hậu, AndroidJUnitRunner để chạy các trường hợp thử nghiệm espresso được viết trong các trường hợp thử nghiệm kiểu JUnit3 và JUnit4. Nó dành riêng cho ứng dụng Android và nó xử lý minh bạch việc tải các trường hợp thử nghiệm espresso và ứng dụng đang được thử nghiệm cả trong thiết bị thực tế hoặc trình giả lập, thực hiện các trường hợp thử nghiệm và báo cáo kết quả của các trường hợp thử nghiệm. Để sử dụng AndroidJUnitRunner trong trường hợp thử nghiệm, chúng tôi cần chú thích lớp thử nghiệm bằng cách sử dụng @RunWith annotation và sau đó chuyển đối số AndroidJUnitRunner như được chỉ định bên dưới:
@RunWith(AndroidJUnit4.class)
public class ExampleInstrumentedTest {
}
Quy tắc JUnit
Khung thử nghiệm Android cung cấp một quy tắc, ActivityTestRule để khởi chạy một hoạt động android trước khi thực hiện các trường hợp thử nghiệm. Nó khởi chạy hoạt động trước mỗi phương thức được chú thích bằng @ Test` và @Before. Nó sẽ chấm dứt hoạt động sau khi phương thức được chú thích bằng @After. Một mã mẫu như sau,
@Rule
public ActivityTestRule<MainActivity> mActivityTestRule = new ActivityTestRule<>(MainActivity.class);
Ở đây, MainActivity là hoạt động được khởi chạy trước khi chạy một trường hợp thử nghiệm và bị hủy sau khi trường hợp thử nghiệm cụ thể được chạy.
ViewMatchers
Espresso cung cấp số lượng lớn các lớp đối sánh chế độ xem (trong gói androidx.test.espresso.matcher.ViewMatchers ) để khớp và tìm các phần tử / chế độ xem giao diện người dùng trong hệ thống phân cấp chế độ xem của màn hình hoạt động android. Phương thức onView của Espresso nhận một đối số duy nhất kiểu Matcher (View matchers), tìm giao diện người dùng tương ứng và trả về đối tượng ViewInteraction tương ứng . Đối tượng ViewInteraction được trả về bởi phương thức onView có thể được sử dụng thêm để gọi các hành động như nhấp vào chế độ xem đã khớp hoặc có thể được sử dụng để xác nhận chế độ xem đã khớp. Mã mẫu để tìm chế độ xem có văn bản, “Hello World!” là như sau,
ViewInteraction viewInteraction = Espresso.onView(withText("Hello World!"));
Ở đây, withText là một trình đối sánh, có thể được sử dụng để đối sánh chế độ xem giao diện người dùng có văn bản “Hello World!”
ViewActions
Espresso cung cấp một số lượng lớn các lớp hành động xem (trong androidx.test.espresso.action.ViewActions) để gọi hành động khác nhau trên chế độ xem đã chọn / phù hợp. Khi onView khớp và trả về đối tượng ViewInteraction , bất kỳ hành động nào cũng có thể được gọi bằng cách gọi phương thức “thực hiện” của đối tượng ViewInteraction và chuyển nó với các hành động xem thích hợp. Mã mẫu để nhấp vào chế độ xem phù hợp như sau,
ViewInteraction viewInteraction = Espresso.onView(withText("Hello World!"));
viewInteraction.perform(click());
Tại đây, hành động nhấp của chế độ xem phù hợp sẽ được gọi.
ViewAssertions
Tương tự như đối sánh chế độ xem và hành động xem, Espresso cung cấp một số lượng lớn xác nhận chế độ xem (trong gói androidx.test.espresso.assertion.ViewAssertions ) để khẳng định chế độ xem phù hợp là những gì chúng tôi mong đợi. Khi onView khớp và trả về đối tượng ViewInteraction , bất kỳ xác nhận nào cũng có thể được kiểm tra bằng cách sử dụng phương pháp kiểm tra của ViewInteraction bằng cách chuyển nó với xác nhận chế độ xem thích hợp. Mã mẫu để khẳng định rằng chế độ xem phù hợp như sau,
ViewInteraction viewInteraction = Espresso.onView(withText("Hello World!"));
viewInteraction.check(matches(withId(R.id.text_view)));
Ở đây, các đối sánh chấp nhận trình đối sánh chế độ xem và xác nhận chế độ xem trả về, có thể được kiểm tra bằng phương pháp kiểm tra của ViewInteraction .
Quy trình làm việc của Khung thử nghiệm Espresso
Hãy để chúng tôi hiểu cách hoạt động của khung thử nghiệm cà phê espresso và cách nó cung cấp các tùy chọn để thực hiện bất kỳ loại tương tác nào với người dùng một cách đơn giản và linh hoạt. Quy trình làm việc của một ca kiểm tra cà phê espresso như được mô tả bên dưới,
Như chúng ta đã biết trước đó, Android JUnit Á hậu, AndroidJUnit4 sẽ chạy các trường hợp thử nghiệm Android. Các trường hợp kiểm tra espresso cần được đánh dấu bằng @RunWith (AndroidJUnut.class) . Đầu tiên, AndroidJUnit4 sẽ chuẩn bị môi trường để chạy các trường hợp thử nghiệm. Nó khởi động thiết bị Android được kết nối hoặc trình giả lập, cài đặt ứng dụng và đảm bảo ứng dụng được kiểm tra ở trạng thái sẵn sàng. Nó sẽ chạy các trường hợp thử nghiệm và báo cáo kết quả.
Espresso cần ít nhất một quy tắc JUnit của loại ActivityTestRule để chỉ định hoạt động. Người chạy Android JUnit sẽ bắt đầu hoạt động được khởi chạy bằng ActivityTestRule .
Mọi trường hợp thử nghiệm cần có tối thiểu lệnh gọi phương thức onView hoặc onDate (được sử dụng để tìm các chế độ xem dựa trên dữ liệu như AdapterView ) để khớp và tìm chế độ xem mong muốn. onView hoặc onData trả về đối tượng ViewInteraction .
Khi đối tượng ViewInteraction được trả về, chúng ta có thể gọi một hành động của dạng xem đã chọn hoặc kiểm tra dạng xem cho dạng xem mong đợi của chúng ta bằng cách sử dụng xác nhận.
Hành động có thể được gọi bằng cách sử dụng phương thức thực hiện của đối tượng ViewInteraction bằng cách chuyển bất kỳ một trong các hành động xem có sẵn.
Assertion có thể được gọi bằng cách sử dụng phương thức kiểm tra của đối tượng ViewInteraction bằng cách chuyển bất kỳ một trong các xác nhận view có sẵn.
Biểu đồ sơ đồ của Dòng công việc như sau,
Ví dụ về khẳng định xem
Hãy để chúng tôi viết một trường hợp thử nghiệm đơn giản để tìm chế độ xem văn bản có “Hello World!” văn bản trong ứng dụng “HelloWorldApp” của chúng tôi và sau đó xác nhận nó bằng cách sử dụng xác nhận chế độ xem. Mã hoàn chỉnh như sau,
package com.tutorialspoint.espressosamples.helloworldapp;
import android.content.Context;
import androidx.test.InstrumentationRegistry;
import androidx.test.rule.ActivityTestRule;
import androidx.test.runner.AndroidJUnit4;
import org.junit.Rule;
import org.junit.Test;
import org.junit.runner.RunWith;
import static androidx.test.espresso.Espresso.onView;
import static androidx.test.espresso.matcher.ViewMatchers.withText;;
import static androidx.test.espresso.assertion.ViewAssertions.matches;
import static org.junit.Assert.*;
/**
* Instrumented test, which will execute on an Android device.
*
* @see <a href="http://d.android.com/tools/testing">Testing documentation</a>
*/
@RunWith(AndroidJUnit4.class)
public class ExampleInstrumentedTest {
@Rule
public ActivityTestRule<MainActivity> mActivityTestRule = new ActivityTestRule<>(MainActivity.class);
@Test
public void view_isCorrect() {
onView(withText("Hello World!")).check(matches(isDisplayed()));
}
@Test
public void useAppContext() {
// Context of the app under test.
Context appContext = InstrumentationRegistry.getTargetContext();
assertEquals("com.tutorialspoint.espressosamples.helloworldapp", appContext.getPackageName());
}
}
Ở đây, chúng tôi đã sử dụng trình so khớp chế độ xem withText để tìm chế độ xem văn bản có “Hello World!” văn bản và khớp với xác nhận chế độ xem để khẳng định rằng chế độ xem văn bản được hiển thị đúng. Sau khi trường hợp thử nghiệm được gọi trong Android Studio, nó sẽ chạy trường hợp thử nghiệm và báo cáo thông báo thành công như bên dưới.