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沒有初始化。正常的應用程序執行正常。
你在用什麼IDE?關於eclipse的解決方法有一個開放的bug,但不是intellij。 https://github.com/pardom/ActiveAndroid/issues/63 – Joe 2013-05-16 21:26:19
它適用於Eclipse。我想'mvn測試'。 – 2013-05-18 13:58:37
是的,它會有相同的問題,因爲maven構建到ActiveAndroid期望的文件夾之外。不應該太難改變ActiveAndroid,讓你註冊你的模型,而不是自動找到它們。 – Joe 2013-05-19 03:13:02