我目前正在测试Android API,为此,我开发了一个应用程序来复制我之前制作的数据库并测试该应用程序(调用几个Android类)。有人指示我使用Robolectric来覆盖Android源,但是,这引起了一些问题。没有它,我的应用程序运行得很好,以及我的测试,但现在我在复制数据库时遇到了错误。每当我运行测试时,我的catch会在复制数据库时给出错误,并且取出该catch会导致AssertionFailureError
assertTrue(activity.accessAdapter() != null);
assertTrue(activity.accessAdapter().accessHelper().checkDatabase()); // Here
我假设这与未复制数据库有关,就好像我放回了代码中的try-catches一样,它会在复制数据库时将其设置为关闭。 / p>
这是我的SQLiteOpenHelper的代码,或者至少在复制数据库时被调用的代码。
public void createDatabase() throws IOException
{
this.getReadableDatabase();
this.close();
try {
copyDatabase();
Log.e(TAG, "Database created.");
} catch (IOException e) {
throw new Error("Error copying database.");
}
}
private void copyDatabase() throws IOException {
InputStream input = ((ShadowContextWrapper) shadowContext).getAssets().open(DATABASE_NAME);
String outFileName = DATABASE_PATH + DATABASE_NAME;
OutputStream output = new FileOutputStream(outFileName);
byte[] buffer = new byte[1024];
int length;
while ((length = input.read(buffer)) > 0) output.write(buffer, 0, length);
output.flush();
output.close();
input.close();
}
我认为问题可能与上下文有关,所以我创建了一个ShadowContext,但这并没有真正帮助。还有其他错误,但这些只是在我的SQLiteOpenHelper中一直调用到createDatabase()的方法。
有谁知道我如何使用Robolectric复制这个数据库?我把它保存在我的应用程序的资产中,但显然,没有模拟器,这是毫无意义的。谢谢。
P.S。如果有必要,我可以添加更多代码,这正是我认为最初需要的。