Yerel test, Android yerine doğrudan kendi iş istasyonunuzda çalıştırılır test edebilirsiniz. Yerel Java Sanal Makinenizi (JVM) Android cihaz yerine test yapmak için kullanılabilir. Yerel testler, daha hızlı çalışmasını sağlayabilir. Ancak, Android çerçevesi, çalıştırabileceğiniz test türleriyle ilgili bir sınırlama oluşturur.
Birim testi, küçük bir kod bölümünün, test edin. Bunun için, ilgili kodu yürütür ve sonucu kontrol eder.
Birim testleri genellikle basittir ancak birim test edilebilirlik göz önünde bulundurularak tasarlanmamıştır:
- Doğrulamak istediğiniz koda bir testten erişilebilir olması gerekir. Örneğin, Örneğin, gizli bir yöntemi doğrudan test edemezsiniz. Bunun yerine sınıfı test edersiniz API'lerini kullanabilirsiniz.
- Birim testlerini izole şekilde çalıştırmak için birimin bağımlılıkları testler altında bulunan ürünlerin yerine, sahte veya diğer test çiftlerini kullanın. Bu, özellikle kodunuzda reklam ortaya koyduk.
Android'de yaygın olarak kullanılan birim testi stratejileri hakkında bilgi edinmek için Ne yapılmalı? test edin.
Yerel test konumu
Varsayılan olarak, yerel birim testlerine ilişkin kaynak dosyalar
module-name/src/test/
Yeni bir dizin oluşturduğunuzda bu dizin zaten mevcut olur.
bir proje başlatma belgesi
oluşturmuş olmalısınız.
Test bağımlılıkları ekleme
Ayrıca JUnit test çerçevesi tarafından sağlanan standart API'ler.
Bunu yapmak için uygulamanızın modülünün build.gradle
dosyasını açın ve aşağıdakini belirtin
kitaplıklarını da
bağımlı olarak görebiliriz. Şunu belirtmek için testImplementation
işlevini kullanın:
bunların uygulamaya değil, yerel test kaynağı grubuna uygulanmalarını sağlayın:
dependencies {
// Required -- JUnit 4 framework
testImplementation "junit:junit:$jUnitVersion"
// Optional -- Robolectric environment
testImplementation "androidx.test:core:$androidXTestVersion"
// Optional -- Mockito framework
testImplementation "org.mockito:mockito-core:$mockitoVersion"
// Optional -- mockito-kotlin
testImplementation "org.mockito.kotlin:mockito-kotlin:$mockitoKotlinVersion"
// Optional -- Mockk framework
testImplementation "io.mockk:mockk:$mockkVersion"
}
Yerel birim test sınıfı oluşturma
Yerel birim test sınıfınızı bir JUnit 4 test sınıfı olarak yazarsınız.
Bunu yapmak için genellikle içinde bir veya daha fazla test yöntemi içeren bir sınıf oluşturun.
module-name/src/test/
Bir test yöntemi, @Test
ek açıklamasıyla başlar ve
bileşenin motive eden tek bir yönünü
uygulamak ve doğrulamak için kodu içerir.
istediğiniz seçeneği belirleyin.
Aşağıdaki örnekte bir yerel birim test sınıfının nasıl uygulanacağı gösterilmektedir. İlgili içeriği oluşturmak için kullanılan
test yöntemi emailValidator_correctEmailSimple_returnsTrue()
doğrulanmaya çalışır
isValidEmail()
,uygulamanın içinde bir yöntemdir. Test işlevi,
True (doğru) değerini döndürürseisValidEmail()
doğru değerini döndürür.
Kotlin
import org.junit.Assert.assertFalse import org.junit.Assert.assertTrue import org.junit.Test class EmailValidatorTest { @Test fun emailValidator_CorrectEmailSimple_ReturnsTrue() { assertTrue(EmailValidator.isValidEmail("name@email.com")) } }
Java
import org.junit.Test; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; class EmailValidatorTest { @Test public void emailValidator_CorrectEmailSimple_ReturnsTrue() { assertTrue(EmailValidator.isValidEmail("name@email.com")); } }
Uygulamanızdaki bileşenlerin doğru olup olmadığını değerlendiren
uygulamasının beklenen sonuçları döndürmesini sağlar. Şu şekilde bir onay kitaplığı kullanmanızı öneririz:
junit.Assert, Hamcrest veya
Gerçek. Yukarıdaki snippet,
junit.Assert
Örnek Android kitaplığı
Yerel birim testleri yürüttüğünüzde Android Gradle Eklentisi bir kitaplığındaki tüm API'leri içeren, sürümünü kullandığınızdan emin olun. Kütüphane, herkese açık yöntemlerin ve ancak yöntemlerin içindeki kod kaldırıldı. Varsa farklı yöntemlere erişildiğinde testte bir istisna oluşur.
Bu sayede, Android'de sınıflara referans verirken yerel testler oluşturulabilir.
çerçeve oluşturmak için Context
kullanabilirsiniz. Daha da önemlisi, benzer bir strateji kullanarak
geliştirmeyi öğreneceksiniz.
Android bağımlılıklarıyla alay etme
Tipik bir sorun, sınıfın bir dize kaynağı kullandığını tespit etmektir. Şunları yapabilirsiniz:
Context
içindeki getString()
yöntemini çağırarak dize kaynaklarını elde edin
sınıfını kullanır. Ancak yerel test, Context
veya sunduğu yöntemlerden herhangi birini kullanamaz.
olduğunu unutmayın. İdeal olarak, getString()
çağrısı
taşındı, ancak bu her zaman mümkün değildir. Çözüm
olduğunda her zaman aynı değeri döndüren bir Context
modeli veya
getString()
yöntemi çağrılır.
Mockable Android kitaplığı ve Mockito veya MockK kullanıyorsanız 300x250'lik bir alan sağlar.
Mockito'yu kullanarak yerel birim testinize örnek bir nesne eklemek için şu adımları uygulayın: programlama modeli:
- Mockito kitaplığı bağımlılığını
build.gradle
dosyanıza aşağıdaki gibi ekleyin: bkz. Test ortamınızı kurma. - Birim testi sınıf tanımınızın başına
@RunWith(MockitoJUnitRunner.class)
ek açıklaması. Bu ek açıklama, Mockito test çalıştırıcısı ile çerçeveyi kullanımınızın doğru olduğunu ve örnek nesnelerinizin ilk kullanıma hazırlanmasını kolaylaştırır. - Bir Android bağımlılığı için örnek nesne oluşturmak amacıyla
@Mock
ek açıklamasını ekleyin ifadesini girin. - Bağımlılığın davranışını kökten değiştirmek için bir koşul belirtebilir ve
Koşul karşılandığında
when()
vethenReturn()
kullanılarak değer döndürülür yöntemlerine göz atın.
Aşağıdaki örnek, test modeli kullanan bir birim testinin nasıl
Mockito-Kotlin ile Kotlin'deki Context
nesnesi oluşturuldu.
import android.content.Context
import org.junit.Assert.assertEquals
import org.junit.Test
import org.junit.runner.RunWith
import org.mockito.Mock
import org.mockito.junit.MockitoJUnitRunner
import org.mockito.kotlin.doReturn
import org.mockito.kotlin.mock
private const val FAKE_STRING = "HELLO WORLD"
@RunWith(MockitoJUnitRunner::class)
class MockedContextTest {
@Mock
private lateinit var mockContext: Context
@Test
fun readStringFromContext_LocalizedString() {
// Given a mocked Context injected into the object under test...
val mockContext = mock<Context> {
on { getString(R.string.name_label) } doReturn FAKE_STRING
}
val myObjectUnderTest = ClassUnderTest(mockContext)
// ...when the string is returned from the object under test...
val result: String = myObjectUnderTest.getName()
// ...then the result should be the expected one.
assertEquals(result, FAKE_STRING)
}
}
Mockito çerçevesini kullanma hakkında daha fazla bilgi edinmek için Mockito API'si"ne bakın.
referansı ve SharedPreferencesHelperTest
sınıfını
örnek kod. Ayrıca Android Testi Codelab'i de deneyin.
Hata: "Yöntem ... sahte"
Mockable Android kitaplığının herhangi bir bölümüne erişmeye çalışırsanız
yöntemlerinden birini Error: "Method ... not mocked
mesajıyla değiştirin.
Atılan istisnalar testleriniz için soruna neden oluyorsa,
yöntemin değerine bağlı olarak, bunun yerine null veya sıfır değerini döndürecek şekilde
dönüş türü. Bunu yapmak için projenizin hedefine aşağıdaki yapılandırmayı ekleyin
Groovy'deki üst düzey build.gradle
dosyası:
android {
...
testOptions {
unitTests.returnDefaultValues = true
}