1

我正在为我的 Android 应用程序编写 JUnit 测试。我已经阅读了 Android 开发人员资源(测试基础知识、Spinner 示例测试等)。现在我想独立于使用它的活动来测试我的 SQLiteOpenHelper 子类。我的想法是扩展ActivityInstrumentationTestCase2<Activity>. 可以简单地Activity用作泛型参数还是我需要一个子类?另外,我是否朝着正确的方向前进,还是有更好的方法来测试我的 SQLiteOpenHelper 子类?

4

3 回答 3

2

我正在寻找这个问题的答案,并在这里找到了这个链接以及另一个有趣的相关问题:

@Pietro接受的答案显示了一些简单的代码,使用 basic AndroidTestCase,这将有助于直接回答问题。

public class DatabaseTest extends AndroidTestCase {
    private MyDatabase db;

    public void setUp(){
        RenamingDelegatingContext context 
        = new RenamingDelegatingContext(getContext(), "test_");
        db = new MyDatabase(context);
    }

    public void testAddEntry(){
        // Here I have my new database which is not connected to the standard database of the App
    }

    public void tearDown() throws Exception{
        db.close(); 
        super.tearDown();
    }
}

我很高兴它看起来多么简单。就我而言,我是 Android 测试的新手,所以目前即使是简单的东西似乎也很困难。


有趣的部分是关键,是使用RenamingDelegatingContext类作为你的“上下文”,而不是仅仅使用普通的上下文。这似乎建立在@Jens 的评论之上。

此类包装给定上下文并将大多数操作委托给该上下文。有用的部分是它performs database and file operations with a renamed database/file name参见在线文档)。

这允许您的 TEST 代码使用与您的 PRODUCTION 代码不同的数据库实例 - 至少在我的情况下这将是有用的。


这是另一个相关的帖子,其中接受的答案说的几乎相同:

那里有一些关于使用的有用提示ContentProvider(但这是另一天的不同问题)。

于 2014-03-06T12:44:04.760 回答
0

以下链接讨论了在 android 中的测试:

http://developer.android.com/tools/testing/testing_android.html

可能你已经看过它只是发布它,以防你错过了它。它是一个很好的资源来了解 android 中的 junit ......

于 2012-10-20T19:59:31.697 回答
0

对于使用 Android Studio 进行测试,

您应该使用MockContext而不是RenamingDelegatingContext.

如果你使用RenamingDelegatingContext,你会得到上下文为空。对于 AndroidTestCase,getContext()将返回 null。对于 InstrumentationTestCase,getInstrumentation().getContext()将返回 null。

有关详细信息,请参阅此答案。https://stackoverflow.com/a/29063736/1020456

于 2015-09-30T15:24:58.983 回答