मेरे पास एक एंड्रॉइड एप्लिकेशन है जो टुकड़ों का उपयोग करता है और एक्शनबार कॉम्पैक्ट लागू करता है।फ्रैगमेंट्स और एक्शनबार का उपयोग करके रोबोलेक्ट्रिक नलपॉन्टर एक्सेप्शन
@Test
public void shouldNotBeNull() throws Exception {
MainFragment mainFragment = new MainFragment();
startFragment(mainFragment);
assertThat(mainFragment, notNullValue());
assertThat(mainFragment.getActivity(), notNullValue());
}
private void startFragment(MainFragment fragment) {
FragmentActivity activity = new FragmentActivity();
shadowOf(activity).callOnCreate(null);
shadowOf(activity).callOnStart();
shadowOf(activity).callOnResume();
FragmentManager fragmentManager = activity.getSupportFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
fragmentTransaction.add(fragment, null);
fragmentTransaction.commit();
}
मैं हो रही है निम्न अपवाद:: मैं सरल Robolectric परीक्षण नीचे दिखाया गया है लिखा
java.lang.NullPointerException: null
at android.app.Activity.invalidateOptionsMenu(Activity.java:2595)
at android.support.v4.app.ActivityCompatHoneycomb.invalidateOptionsMenu(ActivityCompatHoneycomb.java:30)
at android.support.v4.app.FragmentActivity.supportInvalidateOptionsMenu(FragmentActivity.java:572)
at android.support.v4.app.Fragment.setHasOptionsMenu(Fragment.java:708)
at com.example.android.ui.MainFragment.onCreate(MainFragment.java:599)
at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:834)
at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1080)
at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:622)
at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1416)
at android.support.v4.app.FragmentManagerImpl$1.run(FragmentManager.java:420)
at org.robolectric.util.Scheduler.postDelayed(Scheduler.java:37)
at org.robolectric.shadows.ShadowLooper.post(ShadowLooper.java:198)
at org.robolectric.shadows.ShadowHandler.postDelayed(ShadowHandler.java:56)
at org.robolectric.shadows.ShadowHandler.post(ShadowHandler.java:51)
at android.os.Handler.post(Handler.java)
at android.support.v4.app.FragmentManagerImpl.enqueueAction(FragmentManager.java:1322)
at android.support.v4.app.BackStackRecord.commitInternal(BackStackRecord.java:541)
at android.support.v4.app.BackStackRecord.commit(BackStackRecord.java:525)
at com.example.android.ui.MainFragmentTest.startFragment(MainFragmentTest.java:36)
at com.example.android.ui.MainFragmentTest.shouldNotBeNull(MainFragmentTest.java:22)
कुछ इस तरह का उपयोग करते समय:
MainActivity activity = new MainActivity();
shadowOf(activity).callOnCreate(null);
shadowOf(activity).callOnStart();
shadowOf(activity).callOnResume();
जहां MainActivity MainFragment के लिए धारक गतिविधि है, मैं निम्नलिखित अपवाद प्राप्त करें:
java.lang.RuntimeException: java.lang.reflect.InvocationTargetException
at org.robolectric.res.builder.RobolectricPackageManager.getActivityInfo(RobolectricPackageManager.java:59)
at android.support.v7.app.ActionBarActivityDelegate.getUiOptionsFromMetadata(ActionBarActivityDelegate.java:157)
at android.support.v7.app.ActionBarActivityDelegateICS.onCreate(ActionBarActivityDelegateICS.java:53)
at android.support.v7.app.ActionBarActivity.onCreate(ActionBarActivity.java:98)
at com.example.android.ui.MainActivity.onCreate(MainActivity.java:45)
at org.robolectric.shadows.ShadowActivity.invokeReflectively(ShadowActivity.java:176)
at org.robolectric.shadows.ShadowActivity.callOnCreate(ShadowActivity.java:121)
at com.example.android.ui.MainFragmentTest.startFragment(MainFragmentTest.java:28)
at com.example.android.ui.MainFragmentTest.shouldNotBeNull(MainFragmentTest.java:22)
मुझे संदेह है कि यह एक्शनबार कॉम्पैम्प और रोबोलेक्ट्रिक के अनुकूल नहीं हो सकता है। किसी भी सहायता की सराहना की जाएगी।
क्या 'shadowOf (गतिविधि)' वापसी करता है: ६५१०४०३२१० जाहिर Robolectric समर्थन लाइब्रेरी का अपना संस्करण तो निम्न संभव डुप्लिकेट निर्भरता (here से संदर्भित) को रोकने के लिए आवश्यक है है? – Terry
भाग लेने के लिए धन्यवाद। छायाओएफ विधि के स्पष्टीकरण के लिए, रोबॉलेक्ट्रिक वेबसाइट पर सबसे अच्छा दिया जाता है: "कभी-कभी एंड्रॉइड क्लासेस परीक्षण के तहत एंड्रॉइड ऑब्जेक्ट्स की स्थिति तक पहुंचने के तरीकों को उपलब्ध नहीं कराती हैं। Robolectric.shadowOf() विधियां छाया उदाहरणों का प्रतिनिधित्व करती हैं एंड्रॉइड ऑब्जेक्ट्स, परीक्षण पर राज्यों पर जोर देने की इजाजत देता है अन्यथा उपलब्ध नहीं है "। अगर अन्यथा आपको लगता है कि डीबगिंग करते समय shadowOf (गतिविधि) शून्य वापस आती है, तो आईडी नहीं होती है। –
समस्या बीटीडब्ल्यू अभी भी बनी हुई है, इसलिए कोई भी सुझाव उपयोगी होगा। –