2013-05-01 95 views
6

如何獲得Robolectric中ActiveAndroid的ContentProvider的測試覆蓋率?這個簡單的測試失敗。使用Robolectric測試ActiveAndroid

模型:

@Table(name = "Things") 
    public class Thing extends Model { 
    public Thing() { 
     super(); 
    } 
} 

測試:

@RunWith(RobolectricTestRunner.class) 
public class ContentProviderTest { 

    @Test 
    public void itShouldQuery() throws Exception { 
    new Thing().save(); 
    ContentResolver cr = new MainActivity().getContentResolver(); 
    assertNotNull(
     cr.query(Uri.parse("content://org.example/things"), 
        null, null, null, null)); 
    } 
} 

所得堆棧跟蹤:

java.lang.NullPointerException: null 
    at com.activeandroid.Cache.getTableInfo(Unknown Source) 
    at com.activeandroid.Model.<init>(Unknown Source) 
    at org.example.Thing.<init>(Thing.java:9) 
    at org.example.ProviderTest.itShouldQuery(ProviderTest.java:25) 

應用程序上下文應該確定。默認情況下,Robolectric創建出現在清單中的應用程序,在這種情況下是com.activeandroid.Application。

所以,我很疑惑爲什麼cacheInfo中的tableInfo沒有初始化。正常的應用程序執行正常。

+0

你在用什麼IDE?關於eclipse的解決方法有一個開放的bug,但不是intellij。 https://github.com/pardom/ActiveAndroid/issues/63 – Joe 2013-05-16 21:26:19

+0

它適用於Eclipse。我想'mvn測試'。 – 2013-05-18 13:58:37

+1

是的,它會有相同的問題,因爲maven構建到ActiveAndroid期望的文件夾之外。不應該太難改變ActiveAndroid,讓你註冊你的模型,而不是自動找到它們。 – Joe 2013-05-19 03:13:02

回答

4

要在Maven單元測試期間自動掃描ActiveAndroid模型,需要簡單更改爲ModelInfo.scanForModel

在該方法中,有一個「Robolectric fallback」,用於檢測和掃描包含「bin」的路徑。這在Eclipse項目中處理Model類。

Maven編譯成目標/類。對ModelInfo中掃描路徑中的「類」進行額外的檢查就可以實現。

很快爲此添加一個ActiveAndroid拉取請求。