Testowanie i debugowanie bazy danych

Podczas tworzenia baz danych przy użyciu biblioteki trwałości sal warto sprawdzić stabilność bazy danych aplikacji i danych użytkowników. Na tej stronie dowiesz się, jak przetestować bazę danych i wykonać czynności debugowania, które pomogą Ci zaliczyć testy.

Testowanie bazy danych

Istnieją 2 sposoby testowania bazy danych:

  • Na urządzeniu z Androidem.
  • Na komputerze używanym do programowania (niezalecane).

Informacje o testowaniu migracji bazy danych znajdziesz w artykule o testowaniu migracji.

Testowanie na urządzeniu z Androidem

Zalecanym sposobem testowania implementacji bazy danych jest napisanie testu JUnit uruchamianego na urządzeniu z Androidem. Ponieważ testy te nie wymagają tworzenia aktywności, powinny być wykonywane szybciej niż testy interfejsu.

Podczas konfigurowania testów należy utworzyć wersję bazy danych w pamięci, aby testy były bardziej hermetyczne, jak pokazano w tym przykładzie:

Kotlin

@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(
                context, TestDatabase::class.java).build()
        userDao = db.getUserDao()
    }

    @After
    @Throws(IOException::class)
    fun closeDb() {
        db.close()
    }

    @Test
    @Throws(Exception::class)
    fun writeUserAndReadInList() {
        val user: User = TestUtil.createUser(3).apply {
            setName("george")
        }
        userDao.insert(user)
        val byName = userDao.findUsersByName("george")
        assertThat(byName.get(0), equalTo(user))
    }
}

Java

@RunWith(AndroidJUnit4.class)
public class SimpleEntityReadWriteTest {
    private UserDao userDao;
    private TestDatabase db;

    @Before
    public void createDb() {
        Context context = ApplicationProvider.getApplicationContext();
        db = Room.inMemoryDatabaseBuilder(context, TestDatabase.class).build();
        userDao = db.getUserDao();
    }

    @After
    public void closeDb() throws IOException {
        db.close();
    }

    @Test
    public void writeUserAndReadInList() throws Exception {
        User user = TestUtil.createUser(3);
        user.setName("george");
        userDao.insert(user);
        List<User> byName = userDao.findUsersByName("george");
        assertThat(byName.get(0), equalTo(user));
    }
}

Testowanie na hoście

Sala korzysta z biblioteki pomocy SQLite, która udostępnia interfejsy pasujące do tych w klasach Android Framework. Ta obsługa umożliwia przekazywanie niestandardowych implementacji biblioteki pomocy do testowania zapytań do bazy danych.

Testowanie migracji

Sala obsługuje przyrostowe migracje bazy danych, co pozwala zachować istniejące dane w sytuacjach, gdy aktualizacja aplikacji zmieni schemat bazy danych. Nieprawidłowo zdefiniowana migracja może jednak spowodować awarię aplikacji. Pamiętaj o przetestowaniu migracji bazy danych Room.

Debugowanie bazy danych

Istnieje kilka narzędzi i procesów, których możesz użyć do debugowania bazy danych.

Użyj Inspektora baz danych

W Android Studio w wersji 4.1 i nowszych Inspektor baz danych umożliwia sprawdzanie, wysyłanie zapytań i modyfikowanie baz danych aplikacji w trakcie jej działania. Inspektor baz danych jest zgodny z wersją SQLite, która jest dostarczana z Androidem, i zawiera specjalne funkcje do użycia z pomieszczeniami:

  • Używaj działań rynkowych, aby szybko uruchamiać zapytania z klas DAO.
  • Gdy uruchomiona aplikacja wprowadzi zmiany w danych, natychmiast będziesz widzieć aktualizacje na żywo w Inspektorze baz danych.

Więcej informacji o Inspektorze baz danych znajdziesz w artykule Debugowanie bazy danych przy użyciu inspektora baz danych.

Zrzut danych z wiersza poleceń

Pakiet SDK na Androida zawiera narzędzie do sprawdzania baz danych aplikacji sqlite3. Zawiera on polecenia, takie jak .dump wyświetlające zawartość tabeli i .schema, która wyświetla instrukcję SQL CREATE dla istniejącej tabeli.

Polecenia SQLite możesz też wykonywać z poziomu wiersza poleceń, jak widać w tym fragmencie:

adb -s emulator-5554 shell
sqlite3 /data/data/your-app-package/databases/rssitems.db

Więcej informacji znajdziesz w dokumentacji wiersza poleceń sqlite3 dostępnej na stronie SQLite.

Dodatkowe materiały

Więcej informacji o testowaniu i debugowaniu bazy danych Room znajdziesz w tych dodatkowych materiałach:

Posty na blogu

Filmy