का परीक्षण कैसे करें मैं शेरलाक एक्टिविटी को विस्तारित करने वाली गतिविधि पर परीक्षण चलाने की कोशिश कर रहा हूं। मैं सब कुछ मैं 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
के कार्यान्वयन को ओवरराइड करने का प्रयास करता हूं और वहां अपवाद फेंकता हूं, यह काम करता है।
मुझे यहां क्या याद आ रही है?
ओरेकल जावा एसडीके का उपयोग करने के बावजूद मुझे एक ही समस्या है, हमेशा चेतावनी मिलती है: आपको शायद setContentView() पहले कहा जाना चाहिए क्या आपके पास कोई अन्य टिप/फिक्स है? – vsm