Podczas tworzenia baz danych za pomocą biblioteki Room persistence należy sprawdzić stabilność bazy danych aplikacji i danych użytkowników. Z tej strony dowiesz się, jak przetestować bazę danych i wykonać czynności debugowania, które pomogą Ci przejść testy.
Testowanie bazy danych
Bazę danych możesz przetestować na 2 sposoby:
- na urządzeniu z Androidem,
- na komputerze używanym do programowania.
Więcej informacji o testowaniu migracji bazy danych znajdziesz w artykule Testowanie migracji.
Testowanie na urządzeniu z Androidem
Aby przetestować implementację bazy danych, zalecamy napisanie testu JUnit, który będzie działać na urządzeniu z Androidem. Ponieważ te testy nie wymagają aktywności, działają szybciej niż testy interfejsu.
Podczas konfigurowania testów utwórz wersję bazy danych w pamięci, aby testy były bardziej hermetyczne, jak pokazano w tym przykładzie:
import kotlinx.coroutines.test.runTest @RunWith(AndroidJUnit4::class) class SimpleEntityReadWriteTest { private lateinit var userDao: UserDao private lateinit var db: TestDatabase @Before fun createDb() { val context = ApplicationProvider.getApplicationContext<Context>() db = Room.inMemoryDatabaseBuilder<TestDatabase>(context) .setDriver(BundledSQLiteDriver()) .build() userDao = db.userDao() } @After fun closeDb() { db.close() } @Test fun writeUserAndReadInList() = runTest { val user = User(3, "george") userDao.insert(user) val byName = userDao.findUsersByName("george") assertEquals(byName.single(), user) } }
Testowanie na komputerze hosta (JVM)
Dzięki Room KMP możesz uruchamiać testy bazy danych na komputerze używanym do programowania za pomocą lokalnych testów JUnit JVM. Ta konfiguracja pozwala przyspieszyć działanie testów, eliminując obciążenie związane z emulatorem lub urządzeniem z Androidem.
Aby zachować spójność, użyj BundledSQLiteDriver. Ten sterownik zawiera SQLite skompilowany ze źródła, który używa dokładnie tej samej wersji SQLite na komputerze hosta, urządzeniach z Androidem i urządzeniach z iOS. Użycie tego sterownika eliminuje problemy z niezgodnością wersji.
Aby skonfigurować testy JVM, skonfiguruj BundledSQLiteDriver w narzędziu do tworzenia testowej bazy danych:
val db = Room.inMemoryDatabaseBuilder<TestDatabase>() .setDriver(BundledSQLiteDriver()) .build()
Testowanie migracji
Room obsługuje przyrostowe migracje bazy danych, aby zachować dotychczasowe dane aplikacji w sytuacjach, gdy aktualizacja aplikacji zmienia schemat bazy danych. Jednak nieprawidłowo zdefiniowana migracja może spowodować awarię aplikacji. Upewnij się, że testujesz migracje bazy danych Room .
Debugowanie bazy danych
Do debugowania bazy danych możesz użyć kilku narzędzi i procesów.
Korzystanie z Database Inspector
W Android Studio 4.1 i nowszych wersjach Database Inspector umożliwia sprawdzanie baz danych aplikacji, wykonywanie na nich zapytań i modyfikowanie ich podczas działania aplikacji. Database Inspector jest zgodny z wersją SQLite dołączoną do Androida i zawiera specjalne funkcje do użycia z Room:
- Używaj działań w rynnie, aby uruchamiać zapytania z klas DAO.
- Gdy działająca aplikacja wprowadza zmiany w danych, możesz natychmiast zobaczyć aktualizacje na żywo w Database Inspector.
Więcej informacji o Database Inspector znajdziesz w artykule Debugowanie bazy danych za pomocą Database Inspector.
Zrzucanie danych z wiersza poleceń
Pakiet SDK Androida zawiera narzędzie do bazy danych sqlite3, które umożliwia sprawdzanie baz danych aplikacji. Zawiera ono polecenia takie jak .dump do wyświetlania zawartości tabeli i .schema do wyświetlania instrukcji SQL CREATE dla istniejącej tabeli.
Możesz też wykonywać polecenia SQLite z wiersza poleceń, jak pokazano w tym fragmencie kodu:
adb -s emulator-5554 shell sqlite3 /data/data/your-app-package/databases/rssitems.db
Więcej informacji znajdziesz w dokumentacji wiersza poleceń
sqlite3dostępnej na stronie SQLite.
Dodatkowe materiały
Więcej informacji o testowaniu i debugowaniu bazy danych Room znajdziesz w tych materiałach:
Posty na blogu
Filmy
- Database Inspector (11 tygodni z Androidem)