मैं मौजूदा एप्लिकेशन के लिए कुछ परीक्षण लिखने की कोशिश कर रहा हूं। मैं परीक्षणों के लिए एक परीक्षण आवेदन कक्षा की आपूर्ति करना चाहता था और उदाहरण के बाद मैंने here का उदाहरण दिया, क्योंकि मैं डी के लिए डैगर का भी उपयोग कर रहा हूं।ActionNotFoundException ActivityUnitTestCase पर ActionBarActivity
हालांकि, अगर परीक्षण के अंतर्गत गतिविधि एक ActionBarActivity है, मैं निम्नलिखित अपवाद: इस प्रकार
public class MyActivityTest extends ActivityUnitTestCase<MyActivity> {
...
public MyActivityTest() {
super(MyActivity.class);
}
private Context context;
private TestBaseApplication application;
@Override
protected void setUp() throws Exception {
super.setUp();
context = new ContextThemeWrapper(getInstrumentation().getTargetContext(), R.style.Theme_AppCompat){
@Override
public Context getApplicationContext() {
return application;
}
};
application = new TestBaseApplication(context);
setApplication(application);
...
}
public void test() throws InterruptedException {
setActivityContext(context);
Intent intent = new Intent(context, MyActivity.class);
startActivity(intent, null, null);
...
}
}
गतिविधि AndroidManifest में प्रकट होता है:
java.lang.IllegalArgumentException: android.content.pm.PackageManager$NameNotFoundException: ComponentInfo{mypackage.view.activity/mypackage.view.activity.MyActivity}
at android.support.v4.app.NavUtils.getParentActivityName(NavUtils.java:282)
at android.support.v7.app.ActionBarActivityDelegate.onCreate(ActionBarActivityDelegate.java:116)
at android.support.v7.app.ActionBarActivityDelegateICS.onCreate(ActionBarActivityDelegateICS.java:57)
at android.support.v7.app.ActionBarActivity.onCreate(ActionBarActivity.java:98)
at mypackage.view.activity.MyActivity.onCreate(MyActivity.java:68)
at android.app.Activity.performCreate(Activity.java:5231)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087)
at android.test.ActivityUnitTestCase.startActivity(ActivityUnitTestCase.java:158)
at mypackage.MyActivityTest.test(MyActivityTest.java:89)
at java.lang.reflect.Method.invokeNative(Native Method)
at android.test.InstrumentationTestCase.runMethod(InstrumentationTestCase.java:214)
at android.test.InstrumentationTestCase.runTest(InstrumentationTestCase.java:199)
at android.test.AndroidTestRunner.runTest(AndroidTestRunner.java:191)
at android.test.AndroidTestRunner.runTest(AndroidTestRunner.java:176)
at android.test.InstrumentationTestRunner.onStart(InstrumentationTestRunner.java:554)
at android.app.Instrumentation$InstrumentationThread.run(Instrumentation.java:1701)
Caused by: android.content.pm.PackageManager$NameNotFoundException: ComponentInfo{mypackage.view.activity/mypackage.view.activity.MyActivity}
at android.app.ApplicationPackageManager.getActivityInfo(ApplicationPackageManager.java:242)
at android.support.v4.app.NavUtils.getParentActivityName(NavUtils.java:298)
at android.support.v4.app.NavUtils.getParentActivityName(NavUtils.java:279)
... 21 more
मेरा परीक्षण वर्ग इस प्रकार की तरह दिखता है :
<activity
android:name=".view.activity.MyActivity"
android:icon="@drawable/actionbar_logo"
android:screenOrientation="portrait"
android:parentActivityName="mypackage.ParentActivity">
<meta-data android:name="android.support.PARENT_ACTIVITY"
android:value="mypackage.ParentActivity"/>
</activity>
कुछ समस्या निवारण के बाद, मैंने पूर्व चलाने की कोशिश की ऊपर दिए गए लिंक पर पर्याप्त है और यह ठीक काम करता है, भले ही मैं एक्शनबार एक्टिविटी बढ़ाने के लिए गतिविधि बदलूं।
चूंकि मैं समस्या का कारण नहीं ढूंढ पाया, इसलिए मैंने मैनिफेस्ट, build.gradle आदि के साथ भी खेला। अब, मैं बस इसके साथ फंस गया हूं और मैं कुछ और नहीं सोच सकता।
This post समस्या से संबंधित भी हो सकता है, लेकिन उस पर कोई टिप्पणी नहीं है। और this post में भी इसी तरह की समस्या प्रतीत होती है लेकिन समाधान वहां काम नहीं करता है क्योंकि मैं नहीं चाहता कि वास्तविक एप्लिकेशन गतिविधि के साथ लॉन्च किया जाए।
संपादित:
मैं एक साधारण अलग परियोजना बना लिया है इस समस्या को अलग करने के लिए में,।
सबसे पहले मैंने एक्शनबैरएक्टिविटी को विस्तारित करने वाली गतिविधि के लिए एक गतिविधि UnnTestCase लिखा है। यह ठीक काम किया।
इसके बाद, मैंने कुछ और गतिविधियों को जोड़ने की कोशिश की है, जिससे उन्हें एक-दूसरे के माता-पिता बनाते हैं। (ताकि यह मेरी वास्तविक परियोजना की तरह दिख सके)। और यह भी ठीक काम किया।
आखिरकार, मैंने अपनी वास्तविक परियोजना से अलग-अलग गतिविधियों के साथ अधिक गतिविधिUnitTestCase कक्षाएं जोड़ दी हैं, सभी एक्शनबार एक्टिविटी, सभी के लिए एक ही सेटअप के साथ, और दो उपकरणों पर परीक्षण चलाएं, एक एमुलेटर (जीनिमशन) और एक दूसरा मेरा भौतिक उपकरण है। (नेक्सस 4)
टेस्ट सभी ने एमुलेटर पर NameNotFoundException दिया। भौतिक उपकरण पर पारित परीक्षणों में से एक, जिसने मुझे और भी भ्रमित कर दिया।
अगर मुझे लगता है कि यह ऐपकॉम्पेट माता-पिता की गतिविधि को देखता है, तो केवल एक उपकरण की जांच से 'संदर्भ' का उपयोग करते समय देखा जाता है। लेकिन यह सिर्फ एक अनुमान है। आप यह देखने के लिए कि क्या आप इसे अलगाव में पुन: उत्पन्न कर सकते हैं, एक छोटी अलग परियोजना (और परीक्षण) बनाने का प्रयास कर सकते हैं। यदि आप कर सकते हैं, और आप सुनिश्चित हैं कि आप 'appcompat-v7' के नवीनतम संस्करण पर हैं, नमूना प्रोजेक्ट और स्टैक ट्रेस के साथ [समस्या ट्रैकर] (http://b.android.com) पर कोई समस्या दर्ज करें । – CommonsWare
@ कॉमन्सवेयर: टिप्पणी के लिए धन्यवाद। अपने सुझावों के परिणामों के साथ मेरी पोस्ट अपडेट की गई। आपके जैसा सुझाव हो सकता है कि एक बग हो सकता है लेकिन निश्चित रूप से इसे एक अलग परियोजना में पुन: उत्पन्न नहीं कर सकता है, जैसे कि मैं कोई समस्या दर्ज कर सकता हूं। –
दुर्भाग्य से, यह किसी की भी मदद करने की क्षमता को सीमित करता है, क्योंकि हम इसे पुन: उत्पन्न करने में सक्षम होने की संभावना नहीं रखते हैं। :-( – CommonsWare