1

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

Я борется с тем, как именно я должен это делать и по достоинству различных методов.

Без большого опыта кажется, что хорошим методом может быть запуск интеграционного теста. AFAIK это означало бы разворачивание эмулятора для тестирования, а затем запуск тестов, которые фактически создавали и изменяли базу данных на эмуляторе. Этот метод кажется привлекательным, потому что я смог бы провести тест «туда и обратно», где я бы начал с некоторых предварительно сконструированных объектов данных, и мог бы проверить все операции CRUD, используя их, и реальный db. Это позволило бы мне фактически убедиться, что если я вставил объект и затем прочитал его обратно, то POJO, который вошел, это то же самое, что и вышло. Я также мог проверить такие вещи, как упорядочение коллекции объектов, подтверждение того, что действительно были делеции, обновление базы данных и т. Д.

Другой метод тестирования, который я мог бы представить, будет включать в себя использование модульных тестов вместо интеграционных тестов , Я мог бы представить эти тесты, связанные с проверкой правильности создания объекта ContentValues ​​или обеспечения того, чтобы данный объект курсора создал POJO правильно.

Мне кажется, что метод интеграции является превосходным, потому что он обеспечит хорошее покрытие теста, что код CRUD, который я написал, является правильным, так что я не буду сталкиваться с ситуациями, когда я ожидал, что поле объекта для заполнения, но это было нулевое значение, или что-то в этом роде.

Что делают другие люди, чтобы проверить их код Sqlite на Android?

Может ли кто-нибудь помочь мне понять достоинства модульных тестов или интеграционных тестов, когда дело доходит до Sqlite на Android?

ответ

1

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

Вы можете использовать контекст самой Instrumentation для создания баз данных, которые вы тестируете. Для этого и некоторых JUnit4 удобств определяют

testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" 

в вашем Gradle файла и использовать InstrumentationRegistry.getContext() для доступа к контексту.

Это имеет то преимущество, что оно также работает для тестирования библиотеки, не применяя никакого реального приложения или просто не оставляет файлы в контексте этого.

По Android JUnit4 Testing - Where to get Context from? вы можете также использовать

new RenamingDelegatingContext(InstrumentationRegistry.getTargetContext(), "test_"); 

и тестирование баз данных в контексте вашего собственного приложения.

Смежные вопросы