Veritabanınızı test etme ve hata ayıklama

Room kalıcılık kitaplığını kullanarak veritabanları oluşturduğunuzda uygulamanızın veritabanının ve kullanıcılarınızın verilerinin kararlılığını doğrulamanız gerekir. Bu sayfada, veritabanınızı nasıl test edeceğiniz ve testlerinizin başarılı olması için nasıl hata ayıklama adımları uygulayacağınız açıklanmaktadır.

Veritabanınızı test etme

Veritabanınızı test etmenin iki yolu vardır:

  • Android işletim sistemli bir cihazda
  • Ana makine geliştirme makinenizde

Veritabanı taşımalarına özgü testler hakkında bilgi edinmek için Taşımaları Test Etme başlıklı makaleyi inceleyin.

Android işletim sistemini çalıştıran bir cihazda test etme

Veritabanı uygulamanızı test etmek için Android çalıştıran bir cihazda çalışan bir JUnit testi yazmanızı öneririz. Bu testler etkinlik gerektirmediğinden kullanıcı arayüzü testlerinden daha hızlı çalışır.

Testlerinizi oluştururken, aşağıdaki örnekte gösterildiği gibi, testlerinizi daha hermetik hale getirmek için veritabanınızın bellek içi bir sürümünü oluşturmanız gerekir:

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)
    }
}

Ana makinenizde (JVM) test etme

Room KMP ile, yerel JVM JUnit testlerini kullanarak ana geliştirme makinenizde veritabanı testleri çalıştırabilirsiniz. Bu kurulum, Android emülatörünün veya cihazının ek yükünü ortadan kaldırarak testlerinizin daha hızlı çalışmasını sağlar.

Tutarlılığı korumak için BundledSQLiteDriver kullanın. Bu sürücü, kaynak koddan derlenen SQLite'ı içerir. Bu sürücü, ana makinenizde, Android cihazlarınızda ve iOS cihazlarınızda SQLite'ın tam olarak aynı sürümünü kullanır. Bu sürücüyü kullanmak sürüm uyuşmazlığı sorunlarını ortadan kaldırır.

JVM testlerini ayarlamak için test veritabanınızda BundledSQLiteDriver oluşturucuyu yapılandırın:

val db = Room.inMemoryDatabaseBuilder<TestDatabase>()
    .setDriver(BundledSQLiteDriver())
    .build()

Taşıma işlemlerinizi test etme

Room, uygulama güncellemesi veritabanı şemasını değiştirdiğinde mevcut uygulama verilerini korumak için artımlı veritabanı taşımalarını destekler. Ancak yanlış tanımlanmış bir taşıma işlemi, uygulamanızın kilitlenmesine neden olabilir. Room veritabanı taşımalarınızı test ettiğinizden emin olun.

Veritabanınızda hata ayıklama

Veritabanınızdaki hataları ayıklamak için kullanabileceğiniz çeşitli araçlar ve işlemler vardır.

Database Inspector'ı kullanma

Android Studio 4.1 ve sonraki sürümlerde Veritabanı Denetleyici, uygulamanız çalışırken uygulamanızın veritabanlarını incelemenize, sorgulamanıza ve değiştirmenize olanak tanır. Veritabanı Denetçisi, Android ile birlikte gelen SQLite sürümüyle uyumludur ve Room ile kullanılmak üzere özel özellikler içerir:

  • DAO sınıflarınızdan sorgu çalıştırmak için oluk işlemlerini kullanın.
  • Çalışan uygulamanız verilerde değişiklik yaptığında, Database Inspector'da canlı güncellemeleri hemen görebilirsiniz.

Veritabanı Denetçisi hakkında daha fazla bilgi için Veritabanı Denetçisi ile veritabanınızda hata ayıklama başlıklı makaleyi inceleyin.

Komut satırından veri dökümü alma

Android SDK, uygulamanızın veritabanlarını incelemek için bir sqlite3veritabanı aracı içerir. Tablo içeriklerini yazdırmak için .dump ve mevcut bir tablo için SQL CREATE ifadesini yazdırmak için .schema gibi komutlar içerir.

Ayrıca, aşağıdaki snippet'te gösterildiği gibi komut satırından SQLite komutları da yürütebilirsiniz:

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

Daha fazla bilgi için SQLite web sitesinde bulunan sqlite3 komut satırı belgelerine bakın.

Ek kaynaklar

Room veritabanınızı test etme ve hatalarını ayıklama hakkında daha fazla bilgi edinmek için aşağıdaki ek kaynaklara bakın:

Blog yayınları

Videolar