मुझे अपने खुद के बेशुमार सवालों के जवाब देने में थोड़ा अजीब लगता है, लेकिन यहाँ यह है ...
मैंने इस पर उच्च और निम्न खोज की है और विश्वास नहीं कर सकता कि कहीं भी कोई उत्तर प्रकाशित नहीं हुआ है। मैं बहुत करीब आ गया हूं। मैं निश्चित रूप से परीक्षण चला सकता हूं जो अब गतिविधियां करता है, लेकिन मेरे कार्यान्वयन में कुछ समय के मुद्दे हैं जहां परीक्षण हमेशा मज़बूती से पास नहीं होते हैं। यह एकमात्र उदाहरण है कि मुझे उस परीक्षण का कई गतिविधियों में सफलतापूर्वक पता है। उम्मीद है कि मेरे निष्कर्षण और इसे अज्ञात करने से त्रुटियों का परिचय नहीं हुआ। यह एक सरलीकृत परीक्षण है जहां मैं एक लॉगिन गतिविधि में एक उपयोगकर्ता नाम और पासवर्ड टाइप करता हूं, और फिर एक उचित स्वागत संदेश का निरीक्षण एक अलग "स्वागत" गतिविधि पर दिखाया गया है:
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!"));
}
}
यह कोड स्पष्ट रूप से बहुत पठनीय नहीं है। मैंने वास्तव में इसे एक अंग्रेजी जैसे एपीआई के साथ एक साधारण पुस्तकालय में निकाला है, इसलिए मैं सिर्फ इस तरह की बातें कह सकता हूं:
type("myUsername").intoThe(username_field);
click(login_button);
मैंने लगभग 4 गतिविधियों की गहराई से जांच की है और मैं संतुष्ट हूं कि दृष्टिकोण काम करता है, जैसा कि मैंने कहा, एक सामयिक समय मुद्दा प्रतीत होता है जिसे मैंने पूरी तरह से समझ नहीं पाया है। मैं अभी भी गतिविधियों में परीक्षण के किसी भी अन्य तरीकों की सुनवाई में दिलचस्पी रखता हूं।