2017-04-21 36 views
1

我正在嘗試使用robolectric 3.3.2來測試活動。 想要模擬和活動的成員初始化爲NPE中的直接調用結果。onCreate之前的模擬活動類成員

ActivityController<MyActivity> activityController = 
       Robolectric.buildActivity(MyActivity.class); 
mTestActivity = activityController.get(); 

Mockito.when(mTestActivity.getCountry()).thenReturn("xxxx"); 
activityController.setup(); 

嘗試了上面的代碼,但是設置。()(在OnCreate)忽略 getCountry方法的模擬,並調用從活動的定義。

有沒有辦法做到這一點?

回答

0

即使您使用間諜(@Spy,Mockito.spy()),它也不會像這樣工作。

你應該使用存根:

public class MyActivityTest{ 

    public static class StubMyActivity extends MyActivity { 
     Country getCountry() { 
      return someSpecialCountry; 
     } 
    } 

    @Before 
    public void setUp(){ 
     ActivityController<StubMyActivity> activityController = 
       Robolectric.buildActivity(StubMyActivity.class); 
     mTestActivity = activityController.setup().get(); 
    }  
} 
+0

感謝尤金。我試過以上解決方案。但它無法找到字符串資源。 android.content.res.Resources $ NotFoundException:字符串資源ID#0x7f0d0037。當我不使用Stubactivity時,不會出現此異常。你在這裏看到錯誤嗎? – jsam

+0

你是否在日誌消息中看到類似「明顯未找到」的東西? –

+0

Manifest was place.But我的代碼是指另一個包的資源。我通過擴展RobolectricTesRunner並添加了自定義路徑來修復它。現在再次遇到另一個問題:「R包含最終字段,這些字段將由編譯器內聯,不能重新映射」,這與新版本的Robolectric(如3.2.1,3.3)一樣。等你知道嗎? – jsam

相關問題