2013-07-30 61 views
8

我正在使用Robolectric編寫單元測試。設置看起來像這樣robolectric 2 - 用意圖創建測試活動

@RunWith(RobolectricTestRunner.class) 
public class MiAirlineActivityTest { 
    @Before 
    public void setUpFor() { 
     Intent intent = new Intent(HOW_TO_PASS_CONTEXT_HERE, MiAirlineActivity.class); 
     intent.putExtra(EMPLOYEEID_EXTRA, "username"); 

     miAirlineActivity = Robolectric.buildActivity(MiAirlineActivity.class) 
           .withIntent(intent).start().get(); 
    } 
} 

如何在創建新的意圖時傳遞上下文。 我跟着this問題的例子。

有@大衛說,

"... i needed to give a Context and the class of the Activity it was being sent to"

我究竟該怎麼辦呢?

注意:請不要將它標記爲上述鏈接問題的重複。我在問一個新的問題,因爲我不能在那裏添加評論。

+0

[robolectric 2 - 創建意圖的活動]的可能重複(http://stackoverflow.com/questions/17195761/robolectric-2-create-activity-with-intent) – tir38

回答

0
miAirlineActivity = Robolectric.buildActivity(MiAirlineActivity.class).create().get(); 
Intent intent = new Intent(); 
intent.putExtra(EMPLOYEEID_EXTRA, "username"); 
miAirlineActivity.setIntent(intent); 
miAirlineActivity.onCreate(new Bundle()); 

這將啓動你的活動與所需的意圖

+0

謝謝@ user2483079 ,但解決方案出現錯誤: 'testSetBasketForExistingSeatWhoHasDeferredPurchases(com.miairline.activities.MiAirlineActivityTest)已用時間:1.375秒<<<錯誤! 顯示java.lang.NullPointerException \t在com.miairline.activities.MiAirlineActivity.onCreate(MiAirlineActivity.java:540)' 這是哪裏的代碼稱爲getIntent()點和目的是零。 – vikas

8

試試這個

Intent intent = new Intent(Robolectric.getShadowApplication().getApplicationContext(), 
       MiAirlineActivity.class); 
2

建立您的活動,意圖

Intent intent = new Intent(HOW_TO_PASS_CONTEXT_HERE,MiAirlineActivity.class); 
intent.putExtra(EMPLOYEEID_EXTRA, "username"); 
iAirlineActivity = Robolectric.buildActivity(MiAirlineActivity.class).withIntent(intent).create().get(); 

看看roboelectric文檔here

1

Intent intent = new Intent(ShadowApplication.getInstance()。getApplicationContext(),Activity.class);

+2

請格式化您的代碼並添加解釋以幫助解釋此答案與其他人的好處。 – OhBeWise

0

不需要使用構造函數創建上下文和目標Activity類。試試這個:

@Before 
public void setUpFor() { 
    Intent intent = new Intent(); 
    intent.putExtra(EMPLOYEEID_EXTRA, "username"); 

    miAirlineActivity = Robolectric.buildActivity(MiAirlineActivity.class) 
          .withIntent(intent).start().get(); 
}