2012-07-24 195 views
8

我已經使用robolectric寫了一些測試,現在我想要做一些真正的測試課程。Robolectric(android):測試事件?

一個我注意到的是,我無法測試樣的onCreate事件,onLocationChanged等

什麼是標準的做法,用於測試活動...

我應該提取裏面的代碼多數民衆贊成事件並將它們放在一個方法中,事件會調用該方法,而且robolectro可以調用該方法,當然該方法需要公開,對嗎?

此外,如果我想在我的方法中測試一些通常是私有變量的東西,那麼我需要添加一個公共getter,對吧?所以我可以從robolectric檢查這個?

有沒有更好的方法將數據暴露給robolectric?

在此先感謝。

+0

您是否解決了這個問題?如果是這樣,請選擇一個答案。 – 2015-05-18 17:12:34

回答

7

當測試onCreate時,我得到robolectric來調用onCreate,然後在onCreate之後測試活動是否處於正確的狀態。 下面是一個例子:

@RunWith(RoboTestRunner.class) 
public class DashboardActivityTest { 

    private DashboardActivity activity; 

    @Before 
    public void setUp() throws Exception { 
     activity = new DashboardActivity(); 
    } 

    @After 
    public void tearDown() throws Exception { 
    } 

    @Test 
    public void testDashboardHasButtons() { 
     activity.onCreate(null); 
     Button btn1= (Button) activity.findViewById(R.id.btn1); 
     assertNotNull(btn1); 
     Button btn2= (Button) activity.findViewById(R.id.btn2); 
     assertNotNull(btn2); 
    } 
} 

測試私有方法通常表明你的設計可以改進,而不是一個Robolectric特定問題。

見很多討論這個問題: How do I test a class that has private methods, fields or inner classes?

6

由於Robolectric的V2,這是不是從現在開始的活動的正確方法:

MyActivity testActivity = new MyActivity(); 
testActivity.onCreate(null); 

現在的正確方法是使用:

MyActivity testActivity = Robolectric.buildActivity(MyActivity.class).create().get(); 

這將給你一個調用onCreate後的活動的實例。
如果你想測試onStart,onResume,onPause等,它是一樣的方法,只是更多的方法。

MyActivity testActivity = Robolectric.buildActivity(MyActivity.class).create().start().resume().pause().stop().destroy().get(); 

(添加或刪除的代碼行以上的方法來測試你想要的活動的確切實例)

只是想澄清Robolectric的真正新的不錯的功能。

相關問題