使用ContentProviders和数据库进行Android单元测试

时间:2011-12-30 11:17:56

标签: android database unit-testing junit android-contentprovider

我有一个应用程序,它使用ContentProvider来提供数据,而不是直接访问数据库。应用程序正在按预期工作,但我遇到单元测试问题:如何强制ContentProvider使用测试数据库而不是“实时”数据库?如果我没有使用ContentProvider,我可以将不同的数据库名称传递给我的SQLiteOpenHelper子类的构造函数,但现在通过在我的ContentProvider中调用onCreate()来创建数据库:

    @Override
public boolean onCreate()
{
    UKMPGDataProvider.init(getContext(), Constants.DATABASE_NAME);
    return (UKMPGDataProvider.getWritableDatabase() == null) ? false : true;
}

如您所见,数据库名称是硬编码的。

有没有办法将测试名称传递给ContentProvider?

2 个答案:

答案 0 :(得分:0)

你应该使用dependency injection模式来规避这个

答案 1 :(得分:0)

经过一番挖掘后,我发现扩展ProviderTestCase2会自动为数据库添加前缀。