Tôi đang cố gắng kiểm tra giao diện người dùng đơn giản với trường hợp kiểm tra sau, Ý tưởng chính là đặt thử nghiệm một số văn bản giao diện người dùng (để bắt chước đầu vào của người dùng) và sau đó chủ động nhấp vào sự kiện .Thử nghiệm với các phần tử giao diện người dùng trong chế độ xem Android
public class StackTestCase
extends ActivityInstrumentationTestCase2<Stack>
{
private StackDemo mActivity;
private EditText eaten;
public StuckTestCase() {
super("com.crocodil.software.stack", Stack.class);
}
public StuckTestCase(Class<Stack> activityClass) {
super("com.crocodil.software.stack", activityClass);
}
protected void setUp() throws Exception {
super.setUp();
mActivity = this.getActivity();
mCount = (Button) mActivity.findViewById(com.crocodil.software.stack.R.id.action);
eaten = (EditText) mActivity.findViewById(com.crocodil.software.stack.R.id.eaten);
}
public void testPreconditions() {
assertNotNull(mStatus);
}
public void testSimpleDefaults(){
double status = Double.valueOf(mStatus.getText().toString());
eaten.setText(2);
mCount.performClick();
assertEquals((status-2),Double.valueOf(mStatus.getText().toString()));
}
}
kết quả chạy là ngoại lệ -
android.view.ViewRoot$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views.
at android.view.ViewRoot.checkThread(ViewRoot.java:2802)
at android.view.ViewRoot.playSoundEffect(ViewRoot.java:2581)
at android.view.View.playSoundEffect(View.java:8516)
at android.view.View.performClick(View.java:2407)
at com.crocodil.software.stack.test.StackTestCase.testSimpleDefaults(StackTestCase.java:46)
at java.lang.reflect.Method.invokeNative(Native Method)
at android.test.InstrumentationTestCase.runMethod(InstrumentationTestCase.java:204)
at android.test.InstrumentationTestCase.runTest(InstrumentationTestCase.java:194)
at android.test.ActivityInstrumentationTestCase2.runTest(ActivityInstrumentationTestCase2.java:186)
at android.test.AndroidTestRunner.runTest(AndroidTestRunner.java:169)
at android.test.AndroidTestRunner.runTest(AndroidTestRunner.java:154)
at android.test.InstrumentationTestRunner.onStart(InstrumentationTestRunner.java:520)
at android.app.Instrumentation$InstrumentationThread.run(Instrumentation.java:1447)
Điều này xảy ra trên từng truy cập vào các thành phần UI và tôi đã không thể tránh nó bằng cách sử dụng tay cầm hoặc công việc async? bất kỳ đề xuất?
Tôi đang gặp phải vấn đề như vậy 'waitForIdleSync();' gọi chính nó bị treo trong vòng lặp vô hạn. Gỡ lỗi vấn đề, thấy rằng, thông báo 'emptyRunnable()' được đăng thông qua trình xử lý không bị bắt gặp trong 'MessageQueue'. Có vẻ như một số vấn đề thời gian là hiện tại. Nhưng không chắc chắn, làm thế nào để xác định vị trí vấn đề. – ArunJTS