在 JUnit4 和 Mockito 中编写 SQLiteOpenHelper 测试用例

Writing SQLiteOpenHelper test cases in JUnit4 and Mockito

我正在尝试为我的数据库编写测试用例。

我有一个扩展到 SQLiteOpenHelper 的助手 class

DBHelper.java
       public DBHelper(Context context) {
            super(context, DBConstants.DATABASE_NAME, null, DBConstants.DATABASE_VERSION);
        }

和一个构造函数class,它具有所有的插入删除等

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

我的测试class

DBControllerTest.java
@Mock
    Context mContext;
    DBController dbController;

    @Before
    public void setUp() throws Exception {
        MockitoAnnotations.initMocks(this);
        RenamingDelegatingContext context = new RenamingDelegatingContext(mContext, "test_");
        dbController = new DBController(context);
        dbController.open();
    }

这里当我执行 dbController.open() 时,dbHelper.getWritableDatabase() 总是 returns null。

我该如何解决这个问题。我也在以正确的方式嘲笑它。我已经搜索了很多但没有找到解决方案。测试数据库查询的最佳方法是什么。

你不能那样模拟 Context,你需要使用仪器的 Context。由于此测试需要 Android 代码,因此需要检测,因此请确保将其放入测试中的 androidTest 目录中。

示例请参见 this 答案。