Araçlı testler, fiziksel veya emüle edilmiş Android cihazlarda çalıştırılır. Bu nedenle, Android çerçevesi API'lerinden yararlanabilirler. Bu nedenle, enstrümanlı testler yerel testlerden daha yüksek doğruluk sağlar, ancak bu testler çok daha yavaş yürütülür.
Araçlı testleri yalnızca gerçek bir cihazın davranışına göre test etmeniz gereken durumlarda kullanmanızı öneririz. AndroidX Test, gerektiğinde araçlı testler yazmayı kolaylaştıran çeşitli kitaplıklar sağlar.
Test ortamınızı ayarlama
Android Studio projenizde, izlemeli testlerin kaynak dosyalarını module-name/src/androidTest/java/
aracında depolarsınız. Yeni bir proje oluşturduğunuzda bu dizin zaten mevcuttur ve bir
araçlı test örneği içerir.
Başlamadan önce, uygulamalarınız için hızlı bir şekilde araçlı test kodu oluşturup çalıştırmanıza olanak tanıyan AndroidX Test API'lerini eklemeniz gerekir. AndroidX Test; bir JUnit 4 test çalıştırıcısı ve AndroidJUnitRunner
nın yanı sıra Espresso, UI Automator ve Create test gibi işlevsel kullanıcı arayüzü testleri için kullanılan API'ler içerir.
Test çalıştırıcısını ve AndroidX Test tarafından sağlanan kural API'lerini kullanmak için projenizin Android test bağımlılıklarını yapılandırmanız da gerekir.
Uygulamanızın üst düzey build.gradle
dosyasında, aşağıdaki kitaplıkları bağımlılık olarak belirtmeniz gerekir:
dependencies {
androidTestImplementation "androidx.test:runner:$androidXTestVersion"
androidTestImplementation "androidx.test:rules:$androidXTestVersion"
// Optional -- UI testing with Espresso
androidTestImplementation "androidx.test.espresso:espresso-core:$espressoVersion"
// Optional -- UI testing with UI Automator
androidTestImplementation "androidx.test.uiautomator:uiautomator:$uiAutomatorVersion"
// Optional -- UI testing with Compose
androidTestImplementation "androidx.compose.ui:ui-test-junit4:$compose_version"
}
En son sürümleri AndroidX Sürüm Notları ve Oluşturma Kullanıcı Arayüzü Sürüm Notları'nda bulabilirsiniz.
JUnit 4 test sınıflarını kullanmak ve test filtreleme gibi özelliklere erişim elde etmek için uygulamanızın modül düzeyindeki build.gradle
dosyasına aşağıdaki ayarı ekleyerek projenizde varsayılan test araçları çalıştırıcısı olarak AndroidJUnitRunner'ı belirttiğinizden emin olun:
android {
defaultConfig {
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
}
}
Araçlı test sınıfı oluşturma
Araçlı test sınıfınız, yerel testlerin nasıl oluşturulacağı ile ilgili bölümde açıklanan sınıfa benzer bir JUnit 4 test sınıfı olmalıdır.
Enstrümanlı bir JUnit 4 test sınıfı oluşturmak için AndroidJUnit4
değerini varsayılan test çalıştırıcınız olarak belirtin.
Aşağıdaki örnekte, Parcelable arayüzünün LogHistory
sınıfı için doğru bir şekilde uygulandığını doğrulamak üzere araçlı bir testi nasıl yazabileceğiniz gösterilmektedir:
Kotlin
import android.os.Parcel import android.text.TextUtils.writeToParcel import androidx.test.filters.SmallTest import androidx.test.runner.AndroidJUnit4 import com.google.common.truth.Truth.assertThat import org.junit.Before import org.junit.Test import org.junit.runner.RunWith const val TEST_STRING = "This is a string" const val TEST_LONG = 12345678L // @RunWith is required only if you use a mix of JUnit3 and JUnit4. @RunWith(AndroidJUnit4::class) @SmallTest class LogHistoryAndroidUnitTest { private lateinit var logHistory: LogHistory @Before fun createLogHistory() { logHistory = LogHistory() } @Test fun logHistory_ParcelableWriteRead() { val parcel = Parcel.obtain() logHistory.apply { // Set up the Parcelable object to send and receive. addEntry(TEST_STRING, TEST_LONG) // Write the data. writeToParcel(parcel, describeContents()) } // After you're done with writing, you need to reset the parcel for reading. parcel.setDataPosition(0) // Read the data. val createdFromParcel: LogHistory = LogHistory.CREATOR.createFromParcel(parcel) createdFromParcel.getData().also { createdFromParcelData: List<Pair<String, Long>> -> // Verify that the received data is correct. assertThat(createdFromParcelData.size).isEqualTo(1) assertThat(createdFromParcelData[0].first).isEqualTo(TEST_STRING) assertThat(createdFromParcelData[0].second).isEqualTo(TEST_LONG) } } }
Java
import android.os.Parcel; import android.util.Pair; import androidx.test.runner.AndroidJUnit4; import com.google.common.truth.Truth.assertThat; import java.util.List; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; // @RunWith is required only if you use a mix of JUnit3 and JUnit4. @RunWith(AndroidJUnit4.class) public class LogHistoryAndroidUnitTest { public static final String TEST_STRING = "This is a string"; public static final long TEST_LONG = 12345678L; private LogHistory mLogHistory; @Before public void createLogHistory() { mLogHistory = new LogHistory(); } @Test public void logHistory_ParcelableWriteRead() { // Set up the Parcelable object to send and receive. mLogHistory.addEntry(TEST_STRING, TEST_LONG); // Write the data. Parcel parcel = Parcel.obtain(); mLogHistory.writeToParcel(parcel, mLogHistory.describeContents()); // After you're done with writing, you need to reset the parcel for reading. parcel.setDataPosition(0); // Read the data. LogHistory createdFromParcel = LogHistory.CREATOR.createFromParcel(parcel); List<Pair<String, Long>> createdFromParcelData = createdFromParcel.getData(); // Verify that the received data is correct. assertThat(createdFromParcelData.size()).isEqualTo(1); assertThat(createdFromParcelData.get(0).first).isEqualTo(TEST_STRING); assertThat(createdFromParcelData.get(0).second).isEqaulTo(TEST_LONG); } }
Araçlı testler çalıştırma
Araçlı testler gerçek cihazlarda veya emülatörlerde çalıştırılabilir. Android Studio rehberinde şunları nasıl yapacağınızı öğrenebilirsiniz:
Ek kaynaklar
Kullanıcı arayüzü testleri genellikle kullanıcı arayüzünün doğru davranışını doğrulayan Araçlı testlerdir. Espresso veya Compose Test gibi çerçeveler kullanılır. Daha fazla bilgi edinmek için kullanıcı arayüzü test kılavuzunu inceleyin.
Enstrümantasyon testlerini kullanma hakkında daha fazla bilgi için aşağıdaki kaynaklara bakın.