База данных Mock Room для юнит-тестов - PullRequest
0 голосов
/ 22 января 2019

Я пытаюсь сделать несколько юнит-тестов для моей бизнес-логики.

Данные читаются и записываются в базу данных Room, поэтому логика зависит от того, что находится внутри моей базы данных.

Я могу легко buildInMemoryDatabase и проверить всю логику, но используя инструментальные тесты, которые медленные и требуют подключения устройства .

Я хочу запускать модульные тесты только там, где я заменяю RoomRepository другой реализацией Repository interface

class RoomRepository(
    private val database: RoomDatabase //actual room database
): Repository {

    override fun getFooByType(type: Int): Maybe<List<Item>> {
        return database.fooDao()
            .getFooByType(type)
            .map { names ->
                names.map { name -> Item(name) }
            }
            .subscribeOn(Schedulers.io())
    }
}

Может быть, есть способ запустить Room sqlite на хост-компьютере?

Может быть, есть другое решение?

Ответы [ 2 ]

0 голосов
/ 31 мая 2019

Пожалуйста, обратитесь к этой статье.https://developer.android.com/training/data-storage/room/testing-db

Это модульный тест, а не медленный, как UI Test, как вы думаете.

Рекомендуемый подход для тестирования реализации вашей базы данных - написание теста JUnit, который выполняется на устройстве Android,Поскольку эти тесты не требуют создания действия, они должны выполняться быстрее, чем ваши тесты пользовательского интерфейса.

0 голосов
/ 22 января 2019

Обычно вы получаете доступ к базе данных через @Dao интерфейсы.Их можно легко смоделировать.

Даосы возвращаются из абстрактных методов вашего фактического RoomDatabase, так что это также можно легко смоделировать.

Просто создайте экземпляр вашего RoomRepository с помощью насмешеки настройте их правильно.

...