Android Local Unit Test Yazımı
Şimdi sizin aklınızda iki soru işareti var;
Bir, Local Unit Test nedir? İki, Local Unit Test Neden Yapılır?

Sıradan bir test de iki şey yükselir. Bir, kararlı geliştirme hızı. İki, geliştirme döngüsünde erken bug tespiti. Bug, uygulamalarda bazı ihmallerden dolayı karşılaşılan hata demektir. Uygulamanın düzgün çalışmasını engeller. Biz bunu istemiyoruz. Biz istiyoruz ki hatalarınızı önceden tespit edin. Sıradan geliştirmeye örnek, sıradan geliştirme. Yaratıcı geliştirmeye örnek test-driven-development.

Unit Test’ler Android Framework ünden bağımsız ya da çok az bir şekilde bağımlı olan testlerdir. Bunlar yazılan sınıfların methodların sonuçlarını değerlendirir. Unit Test ikiye ayrılır. Bunlardan ilki local unit test,ikincisi ise intstumentation test tir. Local unit testler için bir android cihaza ya da emülatöre ihtiyaç olmazken instrumentation testler bir cihaz yada emülatör üzerinde gerçekleştirilir. Bu makalede sadece local unit test yapılmaya değinilecektir.

Unit Testlerde JUnit, Mockito, Powermock gibi bir çok framework kullanılabilir. Mockito ve PowerMock dan kısaca bahsedecek olursak Context vb. Android dependencylerine ihtiyacımız olduğu vakit kullanabiliriz.

Local Unit testler app>src>test içerisinde bulunur. Projeniz de Android görünümünü seçtiğiniz zaman Local Unit Testlerin bulunduğu paket java klasörünün altında, (test) şeklinde parantez içinde bir ekle gözükür. (anroidTest) yazan ise instrumentation testlerin bulunduğu pakettir.

Şimdi ConverterUtilTest adında bir sınıf oluşturacağız ve bu sınıflar içerisinde @Test annotationu ile methodlar tanımlayarak testlerimizi gerçekleştireceğiz.
Öncelikle gerçek olarak beklenen değeri gereken fonksiyonumuzdan alacağımız. Daha sonra bizim beklediğimiz değeri tanımlayacağız. Bu değerleri tanımladıktan sonra birbirlerine eşitler mi kontrol edeceğiz.Aşağıda söylediklerimin koda dökülmüş hali bulunmaktadır.
@Test
public void testConvertCelsiusToFahrenheit() {
float actual = ConverterUtil.convertCelsiusToFahrenheit(100);
float expected = 212;
assertEquals("Conversion from celsius to fahrenheit failed", expected, actual, 0.0001);
}
assertEquals() methodu karşılaştırma işlemini yapar. Kendisine verilen değerlerin eşit olup olmadığını kontrol eder. Burada devreyen 0.001 değeri delta değeridir. Delta değeri float ve double değerlerin karşılaştırılmasında yuvarlama hatalarından kaçınmak için kullanılır. Bu karşılaştırma aşamasında
Math.abs (expected - actual) <= delta
olması durumunda şart doğru olarak kabul edilir. Diğer fonksiyonumuz da fahrenhayt tan selsius a çevirimi kontrol eder.
@Test
public void testConvertFahrenheitToCelsius() {
float actual = ConverterUtil.convertFahrenheitToCelsius(212);
float expected = 100;
assertEquals("Conversion from fahrenheit to celsius failed", expected, actual, 0.0001);
}
Final olarak test sınıfımız aşağıdaki gibi olacaktır.
Testi başlatmak için test etmek istediğiniz methodun yanındaki yeşil ok simgesine (run) tıklayabilirsiniz. Eğer bütün methodları aynı anda test etmek istiyorsanız sınıf isminin yanındaki yeşil ok simgesine ya da test paketi içerisinde test sınıfına sağ tıklayarak run seçeneğini seçebilirsiniz. Aşağıda bu sınıfın tüm methodlarının test edildiği bir durumu çıktısı verilmiştir.

Evet arkadaşlar, artık Local Unit Test nasıl yazılır öğrenmiş olduk. Eğer test kodunu yazarken zorlanırsanız paylaştığım repo içerisindeki test branch ine bakabilirsiniz. Bu konuda daha çok makale okuyarak daha geniş testler yazabilirsiniz.
The more code the more happiness