android - RenamingDelegatingContext 未创建测试数据库

标签 android unit-testing android-sqlite junit4

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

 @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 不会创建新的测试数据库,而是使用现有的数据库文件。这导致我的测试用例失败,因为我已经有了数据。

最佳答案

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

此外,在测试后关闭 SQLiteOpenHelper 类也是一个好习惯。像这样的东西:

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

如果这不起作用,请发布您的 DBHelper 类来验证它是否正常。

关于android - RenamingDelegatingContext 未创建测试数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35758315/

相关文章:

android-sqlite - 通过从断言复制数据库文件在 Room 中使用预填充的数据库

android - 使用Android内置的SQLite存储来存储并发数据可以吗?

android - Android 上是否有比 PhoneGap 更快的 WebView for HTML5 Canvas?

android - 通过 PendingIntent 问题发送 EXTRA 数据

visual-studio - Visual Studio Community 2015 中的分析测试

C# MVC 模型在对 Controller 操作进行单元测试时始终有效

android - 将数据从 sqlite 保存并从 Applandeo 库加载到日历 View

android - ImageView 的自定义边框

java - 如何以编程方式创建约束布局

c# - 创建具有名称的对象以注入(inject)单元测试