Jetpack Compose’da Room Veritabanı Nasıl Test Edilir?
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’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.
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.
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.
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.
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.
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.
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.
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.
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.