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