إنشاء اختبارات باستخدام الآلات

يتم إجراء الاختبارات المضبوطة على الأجهزة التي تعمل بنظام التشغيل Android، سواء كانت حقيقية أم في وضع المحاكاة. وبالتالي، يمكنهم الاستفادة من واجهات برمجة تطبيقات إطار عمل Android. وبالتالي، توفر الاختبارات الآلية دقة أكبر من الاختبارات المحلية، على الرغم من أنها تعمل بشكل أبطأ.

ولا ننصح باستخدام الاختبارات المعدَّلة إلا في الحالات التي يتعين عليك فيها إجراء اختبار مقابل سلوك جهاز حقيقي. يوفّر اختبار AndroidX عدة مكتبات تسهّل كتابة الاختبارات المساعِدة عند الضرورة.

إعداد بيئة الاختبار

في مشروع "استوديو Android"، يمكنك تخزين ملفات المصدر الخاصة بالاختبارات الآلية في module-name/src/androidTest/java/. يوجد هذا الدليل بالفعل عند إنشاء مشروع جديد ويحتوي على مثال للاختبار المزود.

قبل البدء، عليك إضافة واجهات برمجة التطبيقات AndroidX Test API، والتي تتيح لك إنشاء وتشغيل رمز الاختبار المعدَّل لتطبيقاتك بسرعة. يتضمّن اختبار AndroidX برنامج تشغيل الاختبار JUnit 4 AndroidJUnitRunner وواجهات برمجة تطبيقات لإجراء اختبارات واجهة المستخدم الوظيفية، مثل Espresso وUI Automator وCompose test.

كما ستحتاج أيضًا إلى تهيئة تبعيات اختبار Android لمشروعك لاستخدام برنامج الاختبار وواجهات برمجة التطبيقات للقواعد التي يوفرها اختبار AndroidX Test.

في ملف build.gradle ذي المستوى الأعلى لتطبيقك، عليك تحديد هذه المكتبات كتبعيات:

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"
}

يمكنك العثور على أحدث الإصدارات في AndroidX Release Notes وCompose UI Release Notes.

لاستخدام صفوف اختبار JUnit 4 والحصول على ميزات مثل فلترة الاختبار، احرص على تحديد AndroidJUnitRunner كأداة الاختبار التلقائية في مشروعك من خلال تضمين الإعداد التالي في ملف build.gradle على مستوى الوحدة في تطبيقك:

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

إنشاء صف اختبار قياسي

يجب أن تكون فئة الاختبار المضبوطة على مستوى فئة JUnit 4 مشابهة للفئة الموضحة في القسم الخاص بكيفية إنشاء اختبارات محلية.

لإنشاء فئة اختبار JUnit 4 المستخدمة، حدِّد AndroidJUnit4 كمشغّل الاختبار التلقائي.

يوضِّح المثال التالي كيف يمكنك كتابة اختبار قياسي للتحقّق من تنفيذ واجهة Parcelable بشكل صحيح لفئة LogHistory:

لغة 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)
        }
    }
}

جافا

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);
    }
}

إجراء الاختبارات المؤدّية

ويمكن إجراء الاختبارات الآلية على أجهزة أو محاكيات حقيقية. يمكنك في دليل "استوديو Android" التعرّف على كيفية تنفيذ ما يلي:

مراجع إضافية

اختبارات واجهة المستخدم هي عادة اختبارات آلية تتحقّق من السلوك الصحيح لواجهة المستخدم. تستخدم أُطر عمل مثل Espresso أو Compose Test. لمعرفة المزيد من المعلومات، يُرجى الاطّلاع على دليل اختبار واجهة المستخدم.

لمزيد من المعلومات حول استخدام اختبارات قياس حالة التطبيق، ارجع إلى الموارد التالية.

عيّنة

الدروس التطبيقية حول الترميز