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

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

我有一个扩展到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.

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

解决方法:

您不能像这样模拟Context,而需要使用工具的Context.由于此测试需要Android代码并因此需要检测,因此请确保将其放入androidTest目录中的测试中.

有关示例,请参见this答案.

上一篇:java-在单元测试中,运行实际代码而不是函数存根和模拟对象


下一篇:java-正确使用Mockito.reset()?