2014-10-29 32 views
0

例如,我有兩個活動MainActivity和NextStartedActivity。在MainActivityNPE當創建可見時活動Robolectric 2.3

onCreate()方法

... 
Intent intent = (new Intent(this, NextStartedActivity.class).putExtra("start", 1)); 
startActivity(intent); 

對於MainActivity這個調用工作正常

activity = Robolectric.buildActivity(MainActivity.class).create().visible().get(); 

的onCreate()在NextStartedActivity

... 
request_status = getIntent().getExtras().getInt("start"); 
textureView.setSurfaceTextureListener(this); 
... 

當我使用調用像以上對NextStartedActivity ,我有
java.lang.NullPointerException at NextStartedActivityTest.java:89但當我用

activity = Robolectric.buildActivity(NextStartedActivity.class).get(); 

所有的工作正常。

請給我不同的活動,以這種方式的差異。這是否等於setupActivity()?

+0

爲了幫助你,你需要共享stacktrace和更多的代碼。看起來你的onCreate中會發生一些導致NPE的事情。 – 2014-10-29 13:45:55

+0

我刷新了我的問題 – 2014-10-29 14:40:42

回答

0

如果NPE發生在這條線:

request_status = getIntent().getExtras().getInt("start"); 

那麼問題是,你沒有創建在您的測試,你的代碼預期的意圖。嘗試這樣的:

Intent intent = new Intent(Robolectric.getShadowApplication().getApplicationContext(), 
       NextStartedActivity.class); 
intent.putExtra("start", 1); 
Robolectric.buildActivity(NextStartedActivity.class).withIntent(intent).create().get(); 
+0

非常感謝,它的工作原理。好的,但爲什麼 nextStartedActivity = Robolectric.buildActivity(NextStartedActivity.class).get(); assertThat(nextStartedActivity).isNotNull;作品也是,我的意思是不失敗? – 2014-10-30 07:33:18

+1

因爲如果您沒有在測試中的活動控制器上顯式調用create(),那麼activity上的onCreate不會被調用,所以這段代碼從不執行。通過robolectric,您可以手動驅動生命週期。 – 2014-10-30 10:28:25