6

我该怎么做才能在 Robolectric 中对 ActiveAndroid 的 ContentProvider 进行一些测试?这个简单的测试失败了。

该模型:

@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。

所以,我很疑惑为什么Cache中的tableInfo没有初始化。正常的应用程序执行工作正常。

4

1 回答 1

4

要在 Maven 单元测试期间自动扫描 ActiveAndroid 模型,需要对ModelInfo.scanForModel进行简单更改。

在该方法中,有一个“Robolectric fallback”可以检测和扫描包含“bin”的路径。这处理 Eclipse 项目中的模型类。

Maven 编译为目标/类。在 ModelInfo 中对扫描路径中的“类”进行额外检查可以解决问题。

很快就会为此添加一个 ActiveAndroid 拉取请求。

于 2013-05-31T01:19:59.090 回答