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

时间:2016-03-02 03:48:48

标签: android sqlite junit mockito junit4

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

我有一个扩展到SQLiteOpenHelper的辅助类

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

和一个包含所有插入删除等的构造函数类。

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

我的考试班

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()始终返回null。

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

1 个答案:

答案 0 :(得分:4)

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

请参阅this答案。