2012-10-21 46 views
1

我嘗試使用Robolectric爲我的Android應用程序運行測試,該應用程序使用android-support軟件包。在我的onCreate()方法中,我致電讓robolectric使用android兼容包

getSupportLoaderManager().initLoader(0, null, this); 

不幸的是,getSupportLoaderManager()在此處返回null。我需要準備什麼才能使相容性類可用於robolectric?

我的測試項目中的類路徑中有android.jar(android-8)和android-support-v4.jar以及robolectric-1.2快照版本。

測試類:

@RunWith(RobolectricTestRunner.class) 
public class HoebAppActivityTest { 

    @Test 
    public void shouldStartActivity() { 
      final MyActivity activity = new MyActivity(); 
      System.out.println(activity.getSupportLoaderManager()); // return null 

      activity.onCreate(null); 
    } 
} 

編輯:

System.out.println(Robolectric.directlyOnFullStack(activity) 
      .getSupportLoaderManager()); 

輸出[email protected]所以我想,我只需要養活這回的活動?似乎我在這裏靠近了。

EDIT2:我想結合我自己的ShadowFragmentActivity:

@Implements(FragmentActivity.class) 
public class ShadowFragmentActivity extends 
    com.xtremelabs.robolectric.shadows.ShadowFragmentActivity { 
@RealObject 
private FragmentActivity realActivity; 

@Implementation 
public LoaderManager getSupportLoaderManager() { 
    return Robolectric.directlyOnFullStack(realActivity) 
      .getSupportLoaderManager(); 
} 
} 

綁定

Robolectric.bindShadowClass(ShadowFragmentActivity.class); 

這似乎暫時工作。我將不得不進一步嘗試看看它是否符合我的要求。不知道這是否是正確的方式。

+0

你能分享一些代碼嗎?您是否也能夠在測試項目中獲得基本的Robolectric測試?這只是爲了驗證您是否已正確配置所有依賴關係。 – smk

+0

如果我刪除了getSupportLoaderManager()調用,測試運行成功 – koljaTM

+0

我認爲這是正確的方法。我只會向Robolectric github存儲庫提交請求,所以任何人都可以在未來受益:) –

回答

3

Robolectric 1.x對Android支持庫的支持很差。 Robolectric 2.0明顯更好,並且完全支持碎片。阿爾法剛剛發佈今天:

<dependency> 
    <groupId>org.robolectric</groupId> 
    <artifactId>robolectric</artifactId> 
    <version>2.0-alpha-1</version> 
<dependency> 
+0

很酷,會檢查出來 – koljaTM