← Back to list

Android’de Test Yazarken Kullanılabilecek Faydalı Metotlar

Android projelerinde test yazmak, kod kalitesini artırır ve bakım sürecini kolaylaştırır. JUnit4 ve MockK gibi kütüphaneler sayesinde…

Hazar Duman · 2025-01-04 20:05 · 122 claps · 1.9 min read
#android #unit-testing #kotlin #mockk #junit4
Open on Medium ↗
Wiki topics: 📱 · Mobile Development

Android’de Test Yazarken Kullanılabilecek Faydalı Metotlar

Android projelerinde test yazmak, kod kalitesini artırır ve bakım sürecini kolaylaştırır. JUnit4 ve MockK gibi kütüphaneler sayesinde, özellikle coroutine tabanlı testleri yazmak daha pratik hale gelir. Bu yazıda, coEvery, coAnswers, coJustRun gibi MockK metotlarından ve JUnit’in temel assert fonksiyonlarından bahsederek örnek kod parçaları paylaşacağım.

coEvery, coAnswers, coJustRun MockK, coroutine tabanlı Android projelerinde test yazmayı kolaylaştıran çeşitli metotlar sunar:

coEvery: belirli bir coroutine fonksiyonunun nasıl bir değer döndüreceğini veya ne şekilde davranacağını belirtmek için kullanılır.

coAnswers: coEvery ile benzer şekilde yanıtı düzenlemeye yarar; birden fazla yanıt veya parametreye göre farklı sonuçlar dönmesi isteniyorsa ek esneklik sağlar.

coJustRun: Sonuç döndürmeyen coroutine fonksiyonlarının çalışmasını simüle eder.

class MyRepository {
    suspend fun fetchData(): String {
        // Gerçek ağ çağrısı veya veri işlemleri
        return "Original data"
    }
}

@Test
fun `fetchData is mocked successfully`() = runTest {
    val repository = mockk<MyRepository>()

    coEvery { repository.fetchData() } returns "Sample data"

    val result = repository.fetchData()
    assertEquals("Sample data", result)
}

Bu örnekte, coEvery ile fetchData çağrısının “Sample data” döndüreceğini ayarladık, ardından test içinde aldığımız sonucu assertEqualsile doğruladık.

JUnit’in Temel Asserter Fonksiyonları

JUnit4, testlerde sıkça ihtiyaç duyulan doğrulamalar için temel asserter fonksiyonları sunar. Aşağıda bu metotların temel kullanımları ve ne amaçla kullanıldıkları belirtilmiştir

assertTrue(condition): Koşulun doğru (true) olması beklendiğinde kullanılır.

assertTrue(value > 5)

assertFalse(condition): Koşulun yanlış (false) olması beklendiğinde kullanılır.

assertEquals(expected, actual): Beklenen (expected) ve gerçek (actual) değerlerin eşit olup olmadığını karşılaştırır.

assertEquals("Hello", greetingText)

assertNull(value): Değerin null olup olmadığını kontrol eder.

assertNotNull(value): Değerin null olmamasını kontrol eder.

assertSame(expected, actual): İki ifadenin bellekte aynı referansa sahip olup olmadığını denetler.

val obj = Any()
val ref = obj
assertSame(obj, ref)
  • assertNotSame(expected, actual): İki ifadenin farklı referanslara sahip olup olmadığını denetler.

Bu metotlar, test senaryolarında kodun beklenen şekilde çalışıp çalışmadığını anlamamızı sağlar. Her biri farklı bir kontrol amacına hizmet ederek uygulamamızın mantığını daha kapsamlı test etme olanağı sunar.

Örnek Senaryo

class MyViewModel(private val repository: MyRepository) {

    suspend fun getWelcomeMessage(): String {
        val data = repository.fetchData()
        return if (data.isNotBlank()) {
            "Data received: $data"
        } else {
            "No data found!"
        }
    }
}

class MyViewModelTest {

    private val repository = mockk<MyRepository>()
    private val viewModel = MyViewModel(repository)

    @Test
    fun `when repository returns valid data, welcome message is shown`() = runTest {
        coEvery { repository.fetchData() } returns "Test info"

        val message = viewModel.getWelcomeMessage()
        assertEquals("Data received: Test info", message)
    }

    @Test
    fun `when repository returns blank, error message is shown`() = runTest {
        coEvery { repository.fetchData() } returns ""

        val message = viewModel.getWelcomeMessage()
        assertEquals("No data found!", message)
    }
}

Bu örnekte, ViewModel içindeki mantığı test ederken Repository’yi mock’layarak gerçek ağa çıkmadan veri işlemlerini hızlı ve güvenilir biçimde test edebiliyoruz.

Sonuç

Bu yazıda, coroutine tabanlı Android testlerinde kullanılan coEvery, coAnswers gibi MockK metotlarını ve JUnit’in temel asserter fonksiyonlarını inceledik.

• MockK sayesinde farklı parametre ve dönüş değerlerini simüle etmek daha kolay hale geliyor.

• JUnit asserter fonksiyonlarıyla da çeşitli durumları (null kontrolleri, referans eşitliği, değer eşitliği gibi) test edebiliyoruz.

Düzenli test yazma alışkanlığı, uygulamanın daha kararlı bir yapıya sahip olmasına ve gelecekteki sürümlerde ortaya çıkabilecek hataların daha erken tespit edilmesine yardımcı olur.


메타데이터
post_id
a2d8a286908a
slug
androidde-test-yazarken-kullanılabilecek-faydalı-metotlar-a2d8a286908a
url
https://medium.com/@hazardumann0/androidde-test-yazarken-kullan%C4%B1labilecek-faydal%C4%B1-metotlar-a2d8a286908a
canonical_url
https://medium.com/@hazardumann0/androidde-test-yazarken-kullan%C4%B1labilecek-faydal%C4%B1-metotlar-a2d8a286908a
author_url
https://medium.com/@hazardumann0
status
ok
fetched_at
2026-07-21 10:43:05