我正在尝试为我的数据库编写测试用例.
我有一个扩展到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答案.