Как проверить чтение / обновление файла в MVP? - PullRequest
0 голосов
/ 02 июля 2018

Я пытаюсь изменить свое приложение, не используя шаблон проектирования, на использование MVP.

Первоначально у меня был следующий код:

override fun onCreateInputView(): View {

    //favoritesData is an instance variable, same with "Gson", "parser", "favorites", and "stringArrayListType"
    favoritesData = File(filesDir, "favorites_data.json")

    if (favoritesData.exists()) {
        favorites = Gson.fromJson(parser.parse(FileReader(favoritesData)), stringArrayListType)
    }
}

и

fun updateFavoritesFile() {
    favoritesData.writeText(Gson.toJson(favorites))
}

После попытки использования MVP я изменил код на:

class AnimeFaceKeyboardPresenter(val view : AnimeFaceKeyboardView, private val model : KeyboardModel = KeyboardModel()) : Presenter {

    override fun onCreateInputView() {
        model.favorites = view.loadFavoritesFile()

        //At some point, call view.updateFavoritesFile(arrayListOf("test","test2"))

    }

    override fun onStartInputView() {
    }

}

и код в самой деятельности:

override fun loadFavoritesFile() : ArrayList<String> {
    val favoritesData = File(filesDir, favoritesFileName)
    var favorites = ArrayList<String>()

    //"favorites" is no longer an instance variable     

    if (favoritesData.exists()) {
        favorites = Gson.fromJson(parser.parse(FileReader(favoritesData)), stringArrayListType)
    }

    return favorites
}


override fun updateFavoritesFile(favorites: ArrayList<String>) {
    File(filesDir, favoritesFileName).writeText(Gson.toJson(favorites))
}

override fun onCreateInputView(): View {
       super.onCreateInputView()

       presenter = AnimeFaceKeyboardPresenter(this)
       presenter.onCreateInputView()

}

Я не уверен, правильно ли я использую MVP, но если я это сделаю, то как мне будет протестировать этот код? Например - написание теста, который вызывает updateFavoritesFile(arrayListOf("test1","test2")) и использует loadFavoritesFile(), чтобы проверить, соответствует ли содержимое ожидаемому.

1 Ответ

0 голосов
/ 07 июля 2018

Что ж, возможно, вы захотите переместить файл для чтения и записи в вашу модель (они связаны с данными, которые на самом деле не относятся к вашему представлению).

Тогда ваш тест состоит из создания экземпляра объекта модели и тестирования методов, которые можно выполнить без представления и презентатора (упрощение тестов).

Мне бы очень хотелось абстрагировать ваш файл как некую форму объекта «Репозиторий», который знает, как читать и записывать строки (но вам все равно, где и как). Вы передадите объект репозитория в вашу модель как свойство конструкции. Преимущество этого состоит в том, что вы можете создать фиктивный или искусственный объект Repository, который вы можете использовать для «подачи» тестовых данных и проверки записанных данных, что делает тестирование этой части вашей модели немного проще.

Не забывайте, что у вашего представления не должно быть прямого доступа к вашей модели в MVP. Это больше похоже на MVC (одно из очень немногих различий между MVP и MVC).

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