Araçlarla test oluşturma

Araçlı testler, ister fiziksel ister emülasyonlu olarak Android cihazlarda çalıştırılır. Farklı Android çerçeve API'lerinden yararlanabilirler. Araçlı testler bu nedenle, yerel testlerden daha fazla doğruluk sağlasalar da yavaş yavaş.

Araçlı testleri yalnızca test etmeniz gereken durumlarda kullanmanızı öneririz. gerçek bir cihazın davranışında. AndroidX Test, çeşitli kitaplıklar sağlar gerekli olduğunda araçlı testler yazmayı kolaylaştıran ögeler bulunur.

Test ortamınızı ayarlama

Android Studio projenizde, enstrümantasyon kullanılan module-name/src/androidTest/java/ dilinde testler. Bu dizin, şu durumlarda zaten mevcuttur: yeni bir proje oluşturduğunuzu ve örnek bir araçlı test bulunduğunu göreceksiniz.

Başlamadan önce AndroidX Test API'lerini eklemeniz gerekir. Bu API'ler: uygulamalarınız için araçlı test kodu derleyip çalıştırın. AndroidX Testi, bir JUnit 4 test çalıştırıcısı, AndroidJUnitRunner ve işlevsel kullanıcı arayüzü testleri için API'ler (ör. Espresso, Kullanıcı Arayüzü Otomatikleştirici ve Test oluştur)

Ayrıca, uygulamanızın Android testi bağımlılıklarını test çalıştırıcısını ve AndroidX Test tarafından sağlanan kural API'lerini kullanın.

Uygulamanızın üst düzey build.gradle dosyasında bu kitaplıkları belirtmeniz gerekir bir örneği inceleyelim:

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ı'nda ve Oluşturma Kullanıcı Arayüzü Sürüm Notları.

JUnit 4 test sınıflarını kullanmak ve test filtreleme gibi özelliklere erişmek için varsayılan test aracı olarak AndroidJUnitRunner'ı belirttiğinizden emin olun aşağıdaki ayarı uygulamanızın içindekilere ekleyerek modül düzeyindeki build.gradle dosyası:

android {
    defaultConfig {
        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
    }
}

Araçlı test sınıfı oluşturma

Araçlı test sınıfınız şuna benzer bir JUnit 4 test sınıfı olmalıdır: yerel testlerin nasıl oluşturulacağı ile ilgili bölümde açıklanan sınıfa uygun olmalıdır.

Araçlı bir JUnit 4 test sınıfı oluşturmak için AndroidJUnit4 değerini test aracını kullanın.

Aşağıdaki örnekte, doğrulama işlemi için araçlı testi nasıl yazabileceğiniz gösterilmektedir Ayrıştırılabilir arayüzünün LogHistory sınıf:

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ı testleri çalıştırma

Araçlı testler gerçek cihazlar veya emülatörler üzerinde çalıştırılabilir. Android'de Aşağıdakileri nasıl yapacağınızı öğrenebilirsiniz:

Ek kaynaklar

Kullanıcı arayüzü testleri genellikle kullanıcı arayüzü. Espresso veya Compose Test gibi çerçeveleri kullanırlar. Öğrenmek için daha fazla bilgi için kullanıcı arayüzü testi kılavuzunu okuyun.

Araç testlerini kullanma hakkında daha fazla bilgi için aşağıdakilere bakın kaynaklar.

Örnek

Codelab'ler