Я сталкиваюсь с этой ошибкой:
android.database.sqlite.SQLiteCantOpenDatabaseException: unknown error (code 2062): Could not open database
#################################################################
Error Code : 2062 (SQLITE_CANTOPEN_EMFILE)
Caused By : Application has opened too many files. Maximum of available file descriptors in one process is 1024 in default.
(unknown error (code 2062): Could not open database)
#################################################################
Я думаю, что это произошло, потому что я забыл закрыть курсор в методе. Чтобы сохранить, я хочу воспроизвести эту проблему в модульном тесте. Но я не знаю, как проверить, сколько соединений / курсоров существует и как утверждать это исключение
public int getServicesAmount() {
int servicesAmount;
AppDbHelper dbHelper = new AppDbHelper(context);
SQLiteDatabase db = dbHelper.getReadableDatabase();
String[] columns = {/* some columns */};
Cursor cursor = db.query(
AppEntryContract.ServiceEntry.TABLE,
columns,
null,
null,
null,
null,
null
);
servicesAmount = cursor.getCount();
// here I should close the cursor
return servicesAmount;
}
Это пока что юнит-тест
@Test
public void connectionNotClosed() throws Exception {
try
{
Storage storage = new Storage(RuntimeEnvironment.application);
for(int i = 0; i <= 1025; i++) {
storage.getServicesAmount();
}
Assert.fail();
}
catch(ArithmeticException e)
{
System.out.println("---------------------------------------------");
System.out.println("----------------- SUCCESS -------------------");
System.out.println("---------------------------------------------");
assertThat("",is(""));
}
}