Java 使用重命名DelegatingContext模拟数据库
我试图弄清楚如何使用Java 使用重命名DelegatingContext模拟数据库,java,android,unit-testing,testing,mocking,Java,Android,Unit Testing,Testing,Mocking,我试图弄清楚如何使用RenamingDelegatingContext模拟数据库进行测试。我找到的关于这门课的教程很好,但没有完全回答我的问题 讨论使用重命名DelegatingContext模拟文件 提供了一个关于模拟ContentResolver的教程,但只关注openInputStream()而不是query()和其他类似数据库的操作 据我所知,没有关于模拟数据库的教程。如果我在谷歌上找不到它,请提供一个链接。否则,这将是一个很好的家庭为这样的教程 更新: 很接近我要做的事。区别在于我
RenamingDelegatingContext
模拟数据库进行测试。我找到的关于这门课的教程很好,但没有完全回答我的问题
- 讨论使用
模拟文件重命名DelegatingContext
- 提供了一个关于模拟
的教程,但只关注ContentResolver
而不是openInputStream()
和其他类似数据库的操作query()
ProviderTestCase2
为我的ContentProvider
编写了测试。现在,我正在使用ActivityInstrumentationTestCase2
子类对一些使用该ContentProvider
的活动进行一些功能测试。我需要菜单和按钮点击的仪器。如果我用
RenamingDelegatingContext context =
new RenamingDelegatingContext(getTargetContext(), TEST_FILE_PREFIX);
如何以及何时将其注入到工具中?使用实际数据库而不模拟它不是更好吗?没有任何模拟服务能够将数据库模拟到足以保证通过测试意味着它将在数据库中实际工作的程度。为什么不隔离逻辑和db访问代码,以便您可以测试代码,并使用事务回滚或类似机制获得干净的db环境进行测试?@Thihara My app是开源的。如果用户希望在不中断设备上实际“生产”数据的情况下运行测试套件,该怎么办。目前,我的测试使用完全相同的数据库。我的理解是,
RenamingDelegatingContext
将在数据库名称中添加前缀,从而使用“真实”数据库,但与实际应用程序使用的数据库完全不同。我只是不知道如何设置它,你看到了吗?也许会有帮助。@Thihara是的,我也看到了问答。“我会仔细看一看,看我是否能从中得到什么新东西。”Thihara更新了我的问题,如果你能看一下的话。