2013-08-06 7 views
6

मेरे पास एक एंड्रॉइड एप्लिकेशन है जो टुकड़ों का उपयोग करता है और एक्शनबार कॉम्पैक्ट लागू करता है।फ्रैगमेंट्स और एक्शनबार का उपयोग करके रोबोलेक्ट्रिक नलपॉन्टर एक्सेप्शन

@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) 

मुझे संदेह है कि यह एक्शनबार कॉम्पैम्प और रोबोलेक्ट्रिक के अनुकूल नहीं हो सकता है। किसी भी सहायता की सराहना की जाएगी।

+0

क्या 'shadowOf (गतिविधि)' वापसी करता है: ६५१०४०३२१० जाहिर Robolectric समर्थन लाइब्रेरी का अपना संस्करण तो निम्न संभव डुप्लिकेट निर्भरता (here से संदर्भित) को रोकने के लिए आवश्यक है है? – Terry

+0

भाग लेने के लिए धन्यवाद। छायाओएफ विधि के स्पष्टीकरण के लिए, रोबॉलेक्ट्रिक वेबसाइट पर सबसे अच्छा दिया जाता है: "कभी-कभी एंड्रॉइड क्लासेस परीक्षण के तहत एंड्रॉइड ऑब्जेक्ट्स की स्थिति तक पहुंचने के तरीकों को उपलब्ध नहीं कराती हैं। Robolectric.shadowOf() विधियां छाया उदाहरणों का प्रतिनिधित्व करती हैं एंड्रॉइड ऑब्जेक्ट्स, परीक्षण पर राज्यों पर जोर देने की इजाजत देता है अन्यथा उपलब्ध नहीं है "। अगर अन्यथा आपको लगता है कि डीबगिंग करते समय shadowOf (गतिविधि) शून्य वापस आती है, तो आईडी नहीं होती है। –

+0

समस्या बीटीडब्ल्यू अभी भी बनी हुई है, इसलिए कोई भी सुझाव उपयोगी होगा। –

उत्तर

0

Robolectric 2.4 के रूप में, यह Appcompat लाइब्रेरी का समर्थन करने वाला माना जाता है। कुछ गठिया हैं हालांकि यह बॉक्स से बाहर काम नहीं करता है। चीजें हैं जो मुझे मदद मिली: build.gradle में

target=android-19 android.library.reference.1=/../../build/intermediates/exploded-aar/com.android.support/appcompat-v7/20.0.0  
android.library.reference.2=/../../build/intermediates/exploded-aar/com.android.support/support-v4/20.0.0 
android.library.reference.3=/../../build/intermediates/exploded-aar/com.viewpagerindicator/library/2.4.1 
  1. स्थापना exculdes:

    1. निम्नलिखित सामग्री

    के साथ एक project.properties फ़ाइल बनाना the config manual में बताया गया है Robolectric

androidTestCompile('org.robolectric:robolectric:2.4') { 
    exclude module: 'classworlds' 
    exclude module: 'commons-logging' 
    exclude module: 'httpclient' 
    exclude module: 'maven-artifact' 
    exclude module: 'maven-artifact-manager' 
    exclude module: 'maven-error-diagnostics' 
    exclude module: 'maven-model' 
    exclude module: 'maven-project' 
    exclude module: 'maven-settings' 
    exclude module: 'plexus-container-default' 
    exclude module: 'plexus-interpolation' 
    exclude module: 'plexus-utils' 
    exclude module: 'wagon-file' 
    exclude module: 'wagon-http-lightweight' 
    exclude module: 'wagon-provider-api' 
    exclude group: 'com.android.support', module: 'support-v4' 
    exclude group: 'com.android.support', module: 'appcompat-v7' } 
संबंधित मुद्दे