Araçlarla test oluşturma

Araçlı testler, fiziksel veya emüle edilmiş Android cihazlarda çalıştırılır. Bu nedenle, Android çerçeve 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 yapmanız gereken durumlarda kullanmanızı öneririz. AndroidX Test, gerektiğinde izlemeli testler yazmayı kolaylaştıran çeşitli kitaplıklar sağlar.

Test ortamınızı ayarlama

Android Studio projenizde, donanımlı testlerin kaynak dosyalarını module-name/src/androidTest/java/ içinde depolarsınız. Yeni bir proje oluşturduğunuzda bu dizin zaten mevcuttur ve örnek bir araçlı test içerir.

Başlamadan önce, uygulamalarınız için hızlı bir şekilde izlemeli test kodu oluşturmanızı ve çalıştırmanızı sağlayan AndroidX Test API'lerini eklemelisiniz. AndroidX Test, bir JUnit 4 test çalıştırıcısı AndroidJUnitRunner ve Espresso, Kullanıcı Arayüzü Otomatikleştirici ve Test oluştur gibi işlevsel kullanıcı arayüzü testlerine yönelik 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, şu 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 Compose Kullanıcı Arayüzü Sürüm Notları'nda bulabilirsiniz.

JUnit 4 test sınıflarını kullanmak ve test filtreleme gibi özelliklere erişmek için uygulamanızın modül düzeyindeki build.gradle dosyasına aşağıdaki ayarı ekleyerek AndroidJUnitRunner'ı projenizde varsayılan test aracı çalıştırıcısı olarak 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 testler oluşturma bölümünde açıklanan sınıfa benzer bir JÜnite 4 test sınıfı olmalıdır.

Araçlı 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, izlemeli 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 kılavuzunda şunları öğrenebilirsiniz:

Ek kaynaklar

Kullanıcı arayüzü testleri, genellikle kullanıcı arayüzünün doğru davranışını doğrulayan Testli testlerdir. Espresso veya Compose Test gibi çerçeveler kullanılır. Daha fazla bilgi edinmek için kullanıcı arayüzü test kılavuzunu okuyun.

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

Örnek

Codelab uygulamaları