isolatedContext 与 AndroidTestCase.getContext()

发布于 2024-10-11 12:36:06 字数 393 浏览 6 评论 0 原文

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

I'm writing some tests to test my sqllite database code. Can someone here explain if there would be a difference writing those tests using the context I get from AndroidTestCase.getContext() or using an IsolatedContext.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

我的黑色迷你裙 2024-10-18 12:36:06

对于那些不想点击 Google 网上论坛链接的人,这里给出了答案:

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

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

这是有关isolatedcontext的Android文档。

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

For those that don't want to follow the link to the Google Group, here is the answer given there:

AndroidTestCase.getContext() returns a normal Context object. It's the
Context of the test case, not the component under test.

IsolatedContext returns a "mock" Context. I put "mock" in quotes
because its not a mock in the normal sense of that term (for testing).
Instead, it's a template Context that you have to set up yourself. It
"isolates" you from the running Android system, so that your Context
or your test doesn't accidentally get outside of the test fixture. For
example, an IsolatedContext won't accidentally hit a production
database (unless you set it up to do that!) Note, however, that some
of the methods in an IsolatedContext may throw exceptions.
IsolatedContext is documented in the Developer Guide under Framework
Topics > Testing, both in Testing Fundamentals and in Content Provider
Testing.

Here is the Android docs on IsolatedContext.

And here is the relevant section of the Testing Fundamentals document.

习ぎ惯性依靠 2024-10-18 12:36:06

我遇到了一个简单的问题:我需要在不接触真实数据库的情况下测试我的 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());
        ...    
    }
}

I had the simple problem: I need to test my DAO class without touching the real database. So I found the IsolatedContext from docs. But finally I found the other context in the same docs: RenamingDelegatingContext might be more easier to use. Here is my test case:

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());
        ...    
    }
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文