Механика тестирования с фиктивным подключением к базе данных - PullRequest
1 голос
/ 06 ноября 2010

У меня есть это приложение с базой данных на его бэкэнде, и у меня много проблем, когда я думаю о том, как это проверить. (Это приложение для Android, но я думаю, что концепции тестирования похожи. В тестируемом приложении у меня есть адаптер базы данных:

public class MyDatabaseAdapter() {
    Cursor returnCursorFromQuery(SQLQuery query) {
         // execute an SQL query and wrap the result in a Cursor object
    }
}

У меня есть метод, и я пытаюсь проверить, дает ли он правильный вывод, когда запрос SELECT моей базы данных не возвращает строк:

MyDatabaseAdapter adapter;

public int methodUnderTest() {
    this.adapter = new MyDatabaseAdapter();
    return populate();
}

private int populate() {
    SQLQuery query = new SQLQuery("SELECT * FROM my_table");
    Cursor aCursor = this.adapter.returnCursorFromQuery(query);

    // populate the UI

    return aCursor.getCount();
}

У меня есть объект фиктивного курсора, который возвращает ноль строк по всем запросам в моей тестовой среде, но я не понимаю, как заставить мой приватный метод populate() выполнять его запрос к объекту фиктивного курсора, а не к курсору подключен к моей фактической базе данных. Или, если я пишу фиктивный объект адаптера базы данных, как заставить methodUnderTest() использовать фиктивный адаптер вместо того, который запрограммирован для использования?

Любое направление будет очень полезным. Спасибо.

1 Ответ

1 голос
/ 13 ноября 2010

Вы можете MyDatabaseAdapter реализовать интерфейс IDatabaseAdapter, а затем создать макет MockDatabaseAdapter, который возвращает то, что вы хотите протестировать.Затем вместо установки this.adapter = new MyDatabaseAdapter(); в MethodUnderTest установите this.adapter в конструкторе класса из переданного параметра типа IDatabaseAdapter:

public MyClass(IDatabaseAdapter adapter)
{
     this.adapter = adapter;
}

Затем вы можете передать new MyDatabaseAdapter() впроизводственный код и экземпляр ложного класса в модульных тестах.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...