Jetpack Compose’da Room Veritabanı Nasıl Test Edilir?

Emine İNAN
Huawei Developers - Türkiye
4 min readAug 1, 2024
Photo by Alexander Mils on Unsplash

Giriş 🌟

Jetpack Compose’da Room veritabanı için test yazmak, uygulamanın güvenilirliğini ve performansını sağlamak açısından çok önemlidir. Önceki makalemde, Jetpack Compose’da Hilt ile Room veritabanının nasıl kullanılacağını inceledik. Bu temele dayanarak, bu makalede Room veritabanı için etkili testler yazarak veri işlemlerinizin doğru ve sağlam olmasını sağlayacağız.

Room Veritabanını Test Etmenin Faydaları

Room veritabanını test etmek, ekleme, güncelleme, silme ve sorgulama gibi işlemlerin doğru yapıldığını kontrol ederek veri bütünlüğünü sağlar. Veritabanı şeması ve entity ilişkilerini doğrular, böylece tutarlılık ve doğruluk sağlar. Ayrıca, testler performans sorunlarını belirlemeye yardımcı olur ve veritabanında yapılan değişikliklerin mevcut işlevselliği bozmadığından emin olmanızı sağlar.

QuoteApp’de Room Veritabanını Test Etme

Android’de, Room veritabanı için testler genellikle androidTest dizini altında yazılır. androidTest dizini, bir Android cihazında veya emülatörde çalışan enstrümantasyon testleri için kullanılır. Bu testler, veritabanı işlemlerini, DAO'ları ve diğer Android bileşenlerini gerçekçi bir şekilde test etmek için uygundur.

Jetpack Compose ile oluşturulmuş olan QuoteApp, Room Veritabanı ve Hilt içeren örnek bir uygulamadır. Bu bölümde, bu uygulamada Room veritabanını etkili bir şekilde nasıl test edeceğimizi öğreneceğiz.

QuoteApp

QuoteApp’i test etmeye başlamak için projenin başlangıç koduna buradan ulaşabilirsiniz.

Hadi başlayalım!

Adım 1

🚩 Test için gerekli bağımlılıkları build.gradle dosyanıza ekleyin.

build.gradle.kts (App)

Adım 2

🚩 androidTest klasörü altında, QuoteDao sınıfını test etmek için QuoteDaoTest adında bir sınıf oluşturun.

Android için AndroidJUnit4 test koşucusunu kullanarak çalıştırmak üzere sınıfa @RunWith(AndroidJUnit4::class) anotasyonunu ekleyin ve testler içinde DAO'ya ve veritabanına erişmek için kullanılacak olan quoteDao ve quoteDatabase lateinit değişkenlerini ekleyin.

QuoteDaoTest.kt

Adım 3

🚩 Her testten önce geçici bir veritabanı ve DAO’yu kurmak için createDb metodunu ekleyin.

Her testten önce çalıştırılması için metoda @Before anotasyonunu ekleyin, veritabanını ve DAO'yu başlatmak için createDb metodunu tanımlayın, ApplicationProvider.getApplicationContext<Context>() kullanarak uygulamanın Context’ini alın, sadece test amacıyla kullanılan geçici bir veritabanı oluşturmak için Room.inMemoryDatabaseBuilder(context, QuoteDatabase::class.java).build() ile QuoteDatabase'in bellek içi bir örneğini oluşturun ve quoteDao değişkenini quoteDatabase.quoteDao() çağrısı ile başlatın.

QuoteDaoTest.kt

Adım 4

🚩 Her testten sonra veritabanını temizlemek için closeDb metodunu ekleyin.

Her testten sonra çalıştırılması için metoda @After anotasyonunu ekleyin, veritabanını kapatmak için closeDb metodunu tanımlayın, quoteDatabase.close() ile veritabanını kapatarak kaynakları serbest bırakın ve daha fazla veri işlemi yapılmasını engelleyin.

QuoteDaoTest.kt

Adım 5

🚩 Alıntıların eklenmesini ve alınmasını doğrulamak için quoteDao_insert_and_retrieve_quotes test metodunu ekleyin.

Metodun bir test metodu olduğunu belirtmek için @Test anotasyonunu ekleyin, coroutine yürütmesi için quoteDao_insert_and_retrieve_quotes metodunu runTest kullanarak tanımlayın, quote1 ve quote2 örneklerini oluşturun vequoteDao.addQuote(quote1) ve quoteDao.addQuote(quote2) ile veritabanına ekleyin, quoteDao.getAll().first() ile alıntıları alın, alıntıların varlığını ve sayısını doğrulamak için assertTrue(quotes.contains(quote1)), assertTrue(quotes.contains(quote2)) ve assertEquals(2, quotes.size) kullanın.

QuoteDaoTest.kt

Adım 6

🚩 Bir alıntının silinmesini doğrulamak için quoteDao_delete_quote test metodunu ekleyin.

Metodun bir test metodu olduğunu belirtmek için @Test anotasyonunu ekleyin, coroutine yürütmesi için quoteDao_delete_quote metodunu runTest kullanarak tanımlayın, quote adında bir Quote örneği oluşturun ve quoteDao.addQuote(quote) ile veritabanına ekleyin, quoteDao.deleteQuote(quote) ile alıntıyı silin, quoteDao.getAll().first() kullanarak alıntıları alın ve silinen alıntının artık listede olmadığını doğrulamak için assertFalse(quotes.contains(quote)) kullanın.

QuoteDaoTest.kt

Adım 7

🚩 Alıntıların eklenmesini, silinmesini ve alınmasını doğrulamak için quoteDao_insert_delete_and_retrieve_quotes test metodunu ekleyin.

Metodun bir test metodu olduğunu belirtmek için @Test anotasyonunu ekleyin, coroutine yürütmesi için runTest kullanarak quoteDao_insert_delete_and_retrieve_quotes metodunu tanımlayın, quote1 ve quote2 örneklerini oluşturun ve quoteDao.addQuote(quote1) ve quoteDao.addQuote(quote2) ile veritabanına ekleyin, quote2'yi quoteDao.deleteQuote(quote2) ile silin, alıntıları quoteDao.getAll().first() kullanarak alın ve alıntıların varlığını ve sayısını doğrulamak için assertTrue(quotes.contains(quote1)), assertFalse(quotes.contains(quote2)) ve assertEquals(1, quotes.size) kullanın.

QuoteDaoTest.kt

Adım 8

🚩 Test sınıfını çalıştırmak için, QuoteDaoTest sınıfına sağ tıklayın ve Run 'QuoteDaoTest' seçeneğini seçin; tüm testlerin geçtiğinden emin olmak için Android Studio'nun altındaki Run penceresinde test sonuçlarını görüntüleyin ve alternatif bir yöntem olarak test sınıfının veya her bir metodun yanındaki yeşil play butonunu kullanabilirsiniz.

Test Results
Animated GIF

Sonuç 🤠

Jetpack Compose’da Room veritabanınız için kapsamlı testler yazarak, veri işlemlerinizin doğruluğunu, tutarlılığını ve performansını sağlamış olursunuz. Testler, veritabanı şemanızı ve entity ilişkilerinizi doğrulamakla kalmaz, aynı zamanda değişikliklerin mevcut işlevselliği bozmayacağına dair güven sağlar. Bu adımlarla, Room veritabanını etkili bir şekilde test edebilir, güvenilirliğini ve sağlamlığını artırabilirsiniz.

--

--

Emine İNAN
Huawei Developers - Türkiye

Android Developer by day, Android Developer by night. @Huawei