IsolatedContext与AndroidTestCase.getContext()

我正在编写一些测试来测试我的sqllite数据库代码。 有人可以在这里解释使用我从AndroidTestCase.getContext()获得的上下文或使用IsolatedContext来编写这些测试是否会有所不同。

对于那些不想关注谷歌集团链接的人,这里有答案:

AndroidTestCase.getContext()返回一个普通的Context对象。 它是测试用例的上下文,而不是被测组件。

IsolatedContext返回“模拟”上下文。 我把“模拟”放在引号中,因为它不是那个术语的正常意义上的模拟(用于测试)。 相反,它是您必须自己设置的模板上下文。 它将您与正在运行的Android系统“隔离”,以便您的Context或测试不会意外地超出测试夹具。 例如,IsolatedContext不会意外地命中生产数据库(除非您将其设置为执行此操作!)但是,请注意,IsolatedContext中的某些方法可能会抛出exception。 IsolatedContext在“测试基础”和“内容提供程序测试”中的“框架主题”>“测试”下的“开发人员指南”中进行了记录。

这是IsolatedContext上的Android文档。

以下是“测试基础”文档的相关部分。

我遇到了一个简单的问题:我需要在不触及真实数据库的情况下测试我的DAO类。 所以我从docs中find了IsolatedContext 。 但最后我在同一个文档中find了其他上下文: RenamingDelegatingContext可能更容易使用。 这是我的测试用例:

 public class AddictionDAOTest extends AndroidTestCase { @Override public void setUp() throws Exception { super.setUp(); setContext(new RenamingDelegatingContext(getContext(), "test_")); } public void testReadAllAddictions() throws Exception { ImQuitDAO imQuitDAO = new ImQuitDAO(getContext()); ... } }