Android - Unit Test, чтобы проверить, находится ли курсор в затруднительном положении - PullRequest
0 голосов
/ 15 апреля 2019

Я сталкиваюсь с этой ошибкой:

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(""));
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...