1

我有一个应用程序使用ContentProvider来提供数据而不是直接访问数据库。该应用程序按预期工作,但我有单元测试问题:我如何强制ContentProvider使用测试数据库而不是“活”的?如果我没有使用ContentProvider的,我可以通过不同的数据库名我SQLiteOpenHelper sublass的构造,但现在的数据库,在我的ContentProvider到的onCreate()的调用创建:使用ContentProvider和数据库进行Android单元测试

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

,你可以看,数据库名称是硬编码的。

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

回答

0

有点挖后,我发现扩展ProviderTestCase2将前缀自动添加到数据库中。

+0

因此,对于ProviderTestCase2,是否可以测试MyListContactActivity行为,而不会搞乱真正的Android Contact ContentProvider?你有任何工作测试代码? – sancho21 2014-05-29 23:05:27

0

您应该使用dependency injection模式来规避这一

+0

感谢Flexo,但对onCreate的调用来自系统,所以我无法注入任何东西。我可以使用公共标志来指定我想要创建的数据库名称,但它看起来不太优雅。 – barry 2011-12-30 11:37:44