【问题标题】:RenamingDelegatingContext not creating a test databaseRenamingDelegatingContext 不创建测试数据库
【发布时间】:2016-06-15 23:03:34
【问题描述】:

我正在尝试为我的应用数据库编写测试用例。这是我在设置方法中所做的:

 @Before
    public void testCaseSetUp() {
        RenamingDelegatingContext context = new RenamingDelegatingContext(getTargetContext(), "test_");
        dbController = new DBController(context);
        dbController.open();
    }

DBController.java

public DBController(Context c) {
            context = c;
        }

        public DBController open() throws SQLException {
            dbHelper = DBHelper.getInstance(context);
            database = dbHelper.getWritableDatabase();
            return this;
        }

RenamingDelegatingContext 不会创建新的测试数据库,而是使用现有的 db 文件。这导致我的测试用例失败,因为我已经有了数据。

【问题讨论】:

    标签: android unit-testing android-sqlite junit4


    【解决方案1】:

    你确定你在 DBHelper 类中的某个地方重新创建了你的 SQLiteOpenHelper 吗?从外观上看,后者是一个单例,所以我可以假设您不会每次都重新创建它。您应该在您的 @Before 方法中这样做,因为这里使用 RenamingDelegatingContext 背后的想法是它会在打开新数据库之前删除旧数据库。

    在测试后关闭SQLiteOpenHelper 类也是一个好习惯。比如:

    @After
    public void tearDown() {
        dbHelper.close();
    }
    

    如果这不起作用,请发布您的 DBHelper 课程以验证是否正常。

    【讨论】:

    • 这很好。我正在为我的助手类使用单例模式。葛丽泰,谢谢。
    • 有没有一种方法可以让我创建一个单独的测试数据库仅用于测试,然后在拆解时将其销毁。这样我就不用接触生产数据库了?
    • 完全使用RenamingDelegatingContext 是要走的路。当您在SQLiteOpenHelper 中使用此上下文时,它将创建一个与您的真实数据库无关的测试数据库!如果答案对您有帮助,也许您可​​以投票 - 这样其他人就会知道这就是解决方案。
    猜你喜欢
    • 1970-01-01
    • 2023-01-28
    • 2016-07-14
    • 1970-01-01
    • 1970-01-01
    • 2018-09-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多