我有一个应用程序,它使用ContentProvider来提供数据,而不是直接访问数据库。应用程序正在按预期工作,但我遇到单元测试问题:如何强制ContentProvider使用测试数据库而不是“实时”数据库?如果我没有使用ContentProvider,我可以将不同的数据库名称传递给我的SQLiteOpenHelper
子类的构造函数,但现在通过在我的ContentProvider中调用onCreate()来创建数据库:
@Override
public boolean onCreate()
{
UKMPGDataProvider.init(getContext(), Constants.DATABASE_NAME);
return (UKMPGDataProvider.getWritableDatabase() == null) ? false : true;
}
如您所见,数据库名称是硬编码的。
有没有办法将测试名称传递给ContentProvider?
答案 0 :(得分:0)
你应该使用dependency injection模式来规避这个
答案 1 :(得分:0)
经过一番挖掘后,我发现扩展ProviderTestCase2会自动为数据库添加前缀。