2012-11-04 21 views
6

का परीक्षण कैसे करें मैं शेरलाक एक्टिविटी को विस्तारित करने वाली गतिविधि पर परीक्षण चलाने की कोशिश कर रहा हूं। मैं सब कुछ मैं ActionBarSherlock साथ परीक्षण गतिविधियों के लिए समाधान के बारे में मिल सकता है पढ़ सकते हैं और भी निम्न https://github.com/passy/absshadow-sampleरोबोलेक्ट्रिक: शेरलॉक एक्टिविटी

की कोशिश की इस मैं वर्तमान में क्या कर रहा है:

कस्टम परीक्षण धावक:

public class CustomTestRunner extends RobolectricTestRunner { 
    private static final int SDK_INT = Build.VERSION.SDK_INT; 

    public CustomTestRunner(Class<?> testClass) throws InitializationError { 
     super(testClass); 
     addClassOrPackageToInstrument("com.actionbarsherlock.app.SherlockActivity"); 
    } 

    @Override 
    protected void bindShadowClasses() { 
     super.bindShadowClasses(); 
     Robolectric.bindShadowClass(ShadowSherlockActivity.class); 
    } 

    @Override 
    public void beforeTest(final Method method) { 
     final int targetSdkVersion = robolectricConfig.getSdkVersion(); 
     setStaticValue(Build.VERSION.class, "SDK_INT", targetSdkVersion); 
    } 

    @Override 
    public void afterTest(final Method method) { 
     resetStaticState(); 
    } 

    @Override 
    public void resetStaticState() { 
     setStaticValue(Build.VERSION.class, "SDK_INT", SDK_INT); 
    } 
} 

छाया शेरलॉकएक्टिविटी:

@Implements(SherlockActivity.class) 
public class ShadowSherlockActivity extends ShadowActivity { 

    @Implementation 
    public void setContentView(int layoutResID) { 
     super.setContentView(layoutResID); // TODO Auto-generated method stub 
    } 

    @Implementation 
    public ActionBar getSupportActionBar() { 
     return new ActionBar() { 
      // removed for readability 
     }; 
    } 
} 

किसी कारण के लिए अपने aways इस के साथ नाकाम रहने:

WARNING: you probably should have called setContentView() first 
java.lang.Exception: Stack trace 
    at java.lang.Thread.dumpStack(Thread.java:1342) 
    at  com.xtremelabs.robolectric.shadows.ShadowActivity.findViewById(ShadowActivity.java:183) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:601) 
    at com.xtremelabs.robolectric.bytecode.ShadowWrangler.methodInvoked(ShadowWrangler.java:99) 
    at com.xtremelabs.robolectric.bytecode.RobolectricInternals.methodInvoked(RobolectricInternals.java:144) 
    at android.app.Activity.findViewById(Activity.java) 
    at com.dgti.ds.activities.ChooseLocationActivity.findViews(ChooseLocationActivity.java:44) 
    at com.dgti.ds.activities.ChooseLocationActivity.onCreate(ChooseLocationActivity.java:34) 
    at com.dgti.ds.activities.ChooseLocationActivityTests.shouldGetGoogleAPIKeyIfNull(ChooseLocationActivityTests.java:81) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:601) 
    at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:44) 
    at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15) 
    at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:41) 
    at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:20) 
    at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:28) 
    at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:31) 
    at com.xtremelabs.robolectric.RobolectricTestRunner$1.evaluate(RobolectricTestRunner.java:288) 
    at org.junit.runners.BlockJUnit4ClassRunner.runNotIgnored(BlockJUnit4ClassRunner.java:79) 
    at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:71) 
    at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:49) 
    at org.junit.runners.ParentRunner$3.run(ParentRunner.java:193) 
    at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:52) 
    at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:191) 
    at org.junit.runners.ParentRunner.access$000(ParentRunner.java:42) 
    at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:184) 
    at org.junit.runners.ParentRunner.run(ParentRunner.java:236) 
    at org.junit.runner.JUnitCore.run(JUnitCore.java:157) 
    at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:76) 
    at com.intellij.rt.execution.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:195) 
    at com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:63) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:601) 
    at com.intellij.rt.execution.application.AppMain.main(AppMain.java:120) 

मेरी गतिविधि किसी भी findViewById से पहले setContentView पहले फोन करता है,।

अजीब हिस्सा यह है कि setContentView के छाया कार्यान्वयन में मैं जो भी करता हूं, कुछ भी नहीं होता है (उदाहरण के लिए, NullPojnterException फेंकना)। मेरी छाया पंजीकृत हो जाती है, जैसे कि मैं onCreate के कार्यान्वयन को ओवरराइड करने का प्रयास करता हूं और वहां अपवाद फेंकता हूं, यह काम करता है।

मुझे यहां क्या याद आ रही है?

उत्तर

2

स्पष्ट रूप से ओपनजेडीके की बजाय ओरेकल में इंटेलिज की परियोजना सेटिंग्स में जावा एसडीके को बदलने के लिए मेरे लिए यह मुद्दा तय किया गया।

+0

ओरेकल जावा एसडीके का उपयोग करने के बावजूद मुझे एक ही समस्या है, हमेशा चेतावनी मिलती है: आपको शायद setContentView() पहले कहा जाना चाहिए क्या आपके पास कोई अन्य टिप/फिक्स है? – vsm