मैं अपने एंड्रॉइड ऐप के लिए इंस्ट्रुमेंटेशन टेस्ट लिखने की कोशिश कर रहा हूं।एंड्रॉइड इंस्ट्रूमेंटेशन टेस्टिंग - यूआई थ्रेड मुद्दे
मैं कुछ अजीब थ्रेडिंग मुद्दों में भाग रहा हूं और मुझे कोई समाधान नहीं मिल रहा है।
मेरे मूल टेस्ट:
@RunWith(AndroidJUnit4.class)
public class WorkOrderDetailsTest {
@Rule
public ActivityTestRule<WorkOrderDetails> activityRule = new ActivityTestRule<>(WorkOrderDetails.class);
@Test
public void loadWorkOrder_displaysCorrectly() throws Exception {
final WorkOrderDetails activity = activityRule.getActivity();
WorkOrder workOrder = new WorkOrder();
activity.updateDetails(workOrder);
//Verify customer info is displayed
onView(withId(R.id.customer_name))
.check(matches(withText("John Smith")));
}
}
यह एक
android.view.ViewRootImpl $ CalledFromWrongThreadException में हुई: केवल मूल बात यह है कि एक दृश्य पदानुक्रम बनाया अपने विचार छू सकता है।
...
com.kwtree.kwtree.workorder.WorkOrderDetails.updateDetails (WorkOrderDetails.java:155)
केवल एक चीज updateDetails()
विधि करता है कुछ setText()
कॉल है।
थोड़ा शोध करने के बाद, यह अपने परीक्षण करने के लिए एक UiThreadTestRule
और android.support.test.annotation.UiThreadTest
एनोटेशन जोड़ने समस्या को ठीक होगा की तरह लग रहा था।
@UiThreadTest:
@RunWith(AndroidJUnit4.class)
public class WorkOrderDetailsTest {
//Note: This is new
@Rule
public UiThreadTestRule uiThreadTestRule = new UiThreadTestRule();
@Rule
public ActivityTestRule<WorkOrderDetails> activityRule = new ActivityTestRule<>(WorkOrderDetails.class);
@Test
@UiThreadTest //Note: This is new
public void loadWorkOrder_displaysCorrectly() throws Exception {
final WorkOrderDetails activity = activityRule.getActivity();
WorkOrder workOrder = new WorkOrder();
activity.updateDetails(workOrder);
//Verify customer info is displayed
onView(withId(R.id.customer_name))
.check(matches(withText("John Smith")));
}
}
java.lang.IllegalStateException: विधि मुख्य आवेदन धागे पर बुलाया नहीं जा सकता है (पर: मुख्य)
(नोट: सभी इस स्टैक ट्रेस में विधियां मेरे कोड नहीं हैं)
ऐसा लगता है मुझे मिश्रित परिणाम दे रहे हैं ... यदि इसे मूल धागे पर चलने की ज़रूरत है जो दृश्यों को बनाता है लेकिन मुख्य धागे पर नहीं चल सकता है, तो इसे किस धागे पर चलाना चाहिए?
मैं वास्तव में किसी भी मदद या सुझाव की सराहना करता हूं!
'runOnUiThread' दृष्टिकोण जब' getInstrumentation() waitForIdleSync() के साथ संयुक्त काम किया, '।। '@ पहले' दृष्टिकोण दुर्भाग्य से काम नहीं किया था। सहायता के लिए धन्यवाद! – Khalos