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

يتم إجراء الاختبارات المتوافقة مع الأجهزة الجوّالة على أجهزة 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 وملاحظات إصدار واجهة المستخدم.

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

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

إنشاء صف اختبار مُعدّ للأجهزة

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

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

يوضِّح المثال التالي طريقة كتابة اختبار موجَّه للتحقّق من تنفيذ واجهة القابل للتقسيم بشكل صحيح للفئة 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)
        }
    }
}

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

إجراء الاختبارات المؤدّية إلى الأجهزة

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

مراجع إضافية

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

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

عيّنة

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