Tôi cảm thấy hơi khó xử khi trả lời câu hỏi về tiền thưởng của chính mình, nhưng đây là ...
Tôi đã tìm kiếm nhiều và thấp về điều này và không thể tin rằng không có câu trả lời được công bố ở bất cứ đâu. Tôi đã đến rất gần. Tôi chắc chắn có thể chạy các thử nghiệm kéo dài các hoạt động ngay bây giờ, nhưng việc triển khai của tôi dường như có một số vấn đề về thời gian mà các thử nghiệm không phải lúc nào cũng vượt qua một cách đáng tin cậy. Đây là ví dụ duy nhất mà tôi biết về việc kiểm tra thành công nhiều hoạt động. Hy vọng rằng việc trích xuất và ẩn danh của tôi không gây ra lỗi. Đây là một thử nghiệm đơn giản trong đó tôi nhập tên người dùng và mật khẩu vào một hoạt động đăng nhập, sau đó quan sát thấy một thông báo chào mừng thích hợp được hiển thị trên một hoạt động "chào mừng" khác:
package com.mycompany;
import android.app.*;
import android.content.*;
import android.test.*;
import android.test.suitebuilder.annotation.*;
import android.util.*;
import android.view.*;
import android.widget.*;
import static org.hamcrest.core.Is.*;
import static org.hamcrest.core.IsNull.*;
import static org.hamcrest.core.IsInstanceOf.instanceOf;
import static org.junit.Assert.*;
import static com.mycompany.R.id.*;
public class LoginTests extends InstrumentationTestCase {
@MediumTest
public void testAValidUserCanLogIn() {
Instrumentation instrumentation = getInstrumentation();
Instrumentation.ActivityMonitor monitor = instrumentation.addMonitor(AuthenticateActivity.class.getName(), null, false);
Intent intent = new Intent(Intent.ACTION_MAIN);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.setClassName(instrumentation.getTargetContext(), AuthenticateActivity.class.getName());
instrumentation.startActivitySync(intent);
Activity currentActivity = getInstrumentation().waitForMonitorWithTimeout(monitor, 5);
assertThat(currentActivity, is(notNullValue()));
View currentView = currentActivity.findViewById(username_field);
assertThat(currentView, is(notNullValue()));
assertThat(currentView, instanceOf(EditText.class));
TouchUtils.clickView(this, currentView);
instrumentation.sendStringSync("MyUsername");
currentView = currentActivity.findViewById(password_field);
assertThat(currentView, is(notNullValue()));
assertThat(currentView, instanceOf(EditText.class));
TouchUtils.clickView(this, currentView);
instrumentation.sendStringSync("MyPassword");
instrumentation.removeMonitor(monitor);
monitor = instrumentation.addMonitor(WelcomeActivity.class.getName(), null, false);
currentView = currentActivity.findViewById(login_button;
assertThat(currentView, is(notNullValue()));
assertThat(currentView, instanceOf(Button.class));
TouchUtils.clickView(this, currentView);
currentActivity = getInstrumentation().waitForMonitorWithTimeout(monitor, 5);
assertThat(currentActivity, is(notNullValue()));
currentView = currentActivity.findViewById(welcome_message);
assertThat(currentView, is(notNullValue()));
assertThat(currentView, instanceOf(TextView.class));
assertThat(((TextView)currentView).getText().toString(), is("Welcome, MyUsername!"));
}
}
Mã này rõ ràng là không thể đọc được. Tôi đã thực sự giải nén nó vào một thư viện đơn giản với một API giống như tiếng Anh nên tôi chỉ có thể nói những điều như sau:
type("myUsername").intoThe(username_field);
click(login_button);
Tôi đã kiểm tra độ sâu của khoảng 4 hoạt động và hài lòng rằng cách tiếp cận hoạt động mặc dù như tôi đã nói, đôi khi có một vấn đề về thời gian mà tôi chưa hoàn toàn tìm ra. Tôi vẫn muốn nghe về bất kỳ cách kiểm tra nào khác trong các hoạt động.