简体   繁体   English

在Activity.onCreate()上具有Robolectric的NullPointerExcepcion

[英]NullPointerExcepcion with Robolectric on Activity.onCreate()

I'm using Robolectric to test an Activity (FooActivity) that extends BaseActivity and BaseActivity is extending Activity, but I'm getting a NullPointerException in Activity.onCreate() 我正在使用Robolectric测试扩展BaseActivity的Activity(FooActivity),而BaseActivity正在扩展Activity,但是在Activity.onCreate()中得到了NullPointerException

FooActivity.java extends BaseActivity.java FooActivity.java扩展了BaseActivity.java

@Override
public void onCreate(Bundle icicle) {
    super.onCreate(icicle);
}

BaseActivity.java extends Activity BaseActivity.java扩展了Activity

@Override
public void onCreate(Bundle icicle) {
    super.onCreate(icicle);
    this.mActivityCreated = true;
    mFragmentMgr = getFragmentManager();
    this.setContentView(R.layout.main);
}

Test: FooActivityTest 测试:FooActivityTest

@Before
public void setUp() {
    mActivity = new FooActivity();
}


@Test
public void test() {

    Intent i = new Intent();
    i.putExtra("isTesting", true);
    mActivity.setIntent(i);
    mActivity.onCreate(null);
}

Error 错误

java.lang.NullPointerException
at android.app.Activity.onCreate(Activity.java:874)
at com.pdi.enjoy.activities.BaseActivity.onCreate(BaseActivity.java:129)
at com.pdi.enjoy.activities.FooActivityTest.onCreate(FooActivity.java:107)
at com.pdi.enjoy.activities.FooActivityTest.test(FooActivity.java:32)
at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:45)
at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15)
at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:42)
at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:20)
at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:28)
at org.robolectric.RobolectricTestRunner$2.evaluate(RobolectricTestRunner.java:234)
at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:263)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:68)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:47)
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:231)
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:60)
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:229)
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:50)
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:222)
at org.robolectric.RobolectricTestRunner$1.evaluate(RobolectricTestRunner.java:175)
at org.junit.runners.ParentRunner.run(ParentRunner.java:300)
at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:50)
at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197)
Intent i= new Intent(Robolectric.application, FooActivity.class);
i.putExtra("isTesting", true);

FooActivity activity = Robolectric.buildActivity(FooActivity.class).withIntent(i).create().get();

Don't manually call onCreate on the activity. 不要在活动上手动调用onCreate。 Robolectric will take care of that.. Robolectric会解决这个问题。

From here you can do whatever other tests using the activity object you need. 在这里,您可以使用所需的活动对象执行任何其他测试。

Looks like an earlier version of Robolectric required you to call the lifecycle methods explicitly, but the later ones are able to handle the lifecycle calls themselves. 看起来像Robolectric的早期版本要求您显式调用生命周期方法,但较晚的版本能够自行处理生命周期调用。

Also, one had to use activity.getApplication() to get the application, but it looks like Robolectric.application is directly available now. 此外,还必须使用activity.getApplication()来获取应用程序,但看起来Robolectric.application现在可以直接使用。

@dymmeh: Thanks for you answer. @dymmeh:谢谢你的回答。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM