Nếu bạn muốn chạy hoạt động cụ thể thì: ActivityTestRule hoặc IntentTestRule là những gì bạn cần.
Hợp đồng khá tự giải thích chỉ cần đặt hoạt động mong muốn của bạn mà bạn muốn bắt đầu làm tham số đầu tiên.
ActivityTestRule<>(ActivityYouWantToStart.class, initialTouchMode, launchActivity) //rule for activity start
IntentTestRule<>(ActivityYouWantToStart.class, initialTouchMode, launchActivity) //used for testing intents and activities
quan trọng cần chú ý ở đây là launchActivity boolean. Nếu bạn đặt điều này thành đúng, mỗi thử nghiệm sẽ tự động khởi chạy hoạt động.
Cách sử dụng khác là nếu một số hoạt động mong đợi một số ý định, dữ liệu hoặc tương tự được gửi đến trước khi chạy chúng, bạn có thể đặt tham số này thành false và chuẩn bị ứng dụng của bạn trước khi chạy thử nghiệm/hoạt động.
Ví dụ, nếu bạn cần một người dùng đăng nhập được lưu trong sở thích chia sẻ của bạn để chạy Hoạt động B và logic của hoạt động nói rằng:
if(!userIsLoggedIn()){
jumpToMainActivity();
}
Sau đó, bạn có thể tiết kiệm một số người dùng giả trước khi chạy thử nghiệm hoặc ví dụ điền vào cơ sở dữ liệu với các đối tượng giả và sau khi bạn chuẩn bị môi trường cho Hoạt động B mọi thứ thì bạn gọi.
mActivityRule.launchActivity(null);
ý rằng launchActivity lấy ví dụ, đây là thực Ý định rằng Hoạt động B nhận được, nếu nó hy vọng một số dữ liệu bổ sung trong cách mà bạn có thể chuẩn bị tiếp cận mục đích trước khi bắt đầu thử nghiệm.
Full ví dụ về chạy hoạt động tùy chỉnh:
/**
* Testing of the snackbar activity.
**/
@RunWith(AndroidJUnit4.class)
@LargeTest
public class SnackbarActivityTest{
//espresso rule which tells which activity to start
@Rule
public final ActivityTestRule<SnackbarActivity> mActivityRule =
new ActivityTestRule<>(SnackbarActivity.class, true, false);
@Override
public void tearDown() throws Exception {
super.tearDown();
//just an example how tear down should cleanup after itself
mDatabase.clear();
mSharedPrefs.clear();
}
@Override
public void setUp() throws Exception {
super.setUp();
//setting up your application, for example if you need to have a user in shared
//preferences to stay logged in you can do that for all tests in your setup
User mUser = new User();
mUser.setToken("randomToken");
}
/**
*Test methods should always start with "testXYZ" and it is a good idea to
*name them after the intent what you want to test
**/
@Test
public void testSnackbarIsShown() {
//start our activity
mActivityRule.launchActivity(null);
//check is our text entry displayed and enter some text to it
String textToType="new snackbar text";
onView(withId(R.id.textEntry)).check(matches(isDisplayed()));
onView(withId(R.id.textEntry)).perform(typeText(textToType));
//click the button to show the snackbar
onView(withId(R.id.shownSnackbarBtn)).perform(click());
//assert that a view with snackbar_id with text which we typed and is displayed
onView(allOf(withId(android.support.design.R.id.snackbar_text),
withText(textToType))) .check(matches(isDisplayed()));
}
}
tôi có thể đề nghị [link này] (https://google.github.io/android-testing-support-library/docs/espresso/index.html) và [cái này] (https://developer.android.com/training/testing/ui-testing/espresso-testing.html)? – ddb
Tôi đã nhìn thấy các liên kết đó, bạn chỉ ra thông tin cụ thể nào giúp tôi giải quyết vấn đề của mình? – Moses
xin lỗi @Moses, nhưng từ câu hỏi của bạn nó không rõ ràng bạn googled cho một số giải pháp trước khi gửi bài ở đây – ddb