12

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

4

3 回答 3

9

对于那些不想点击 Google Group 链接的人,这里是那里给出的答案:

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

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

这是关于 IsolatedContext 的 Android 文档。

这是测试基础文件的相关部分。

于 2013-07-28T17:08:02.247 回答
3

The answer:

http://groups.google.com/group/android-developers/browse_thread/thread/3a7bbc78258a194a?tvc=2

于 2011-01-18T16:09:51.120 回答
2

我有一个简单的问题:我需要在不接触真实数据库的情况下测试我的 DAO 类。所以我找到了IsolatedContext来自文档。但最后我在同一个文档中找到了另一个上下文: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());
        ...    
    }
}
于 2014-11-29T21:55:19.463 回答