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

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

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

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

في مشروع استوديو Android، تخزِّن ملفات المصدر التي يتم قياسها الاختبارات في module-name/src/androidTest/java/. يوجد هذا الدليل بالفعل في تنشئ مشروعًا جديدًا وتحتوي على مثال لاختبار قياس حالة التطبيق.

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

عليك أيضًا ضبط اعتماديات اختبار Android لمشروعك من أجل استخدام مُشغّل الاختبار وواجهات برمجة تطبيقات القواعد التي يوفّرها اختبار AndroidX.

يجب تحديد هذه المكتبات في ملف 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 باعتبارها السمة برنامج تشغيل الاختبار الافتراضي.

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

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. للتعلّم للمزيد من المعلومات، يُرجى الاطّلاع على دليل اختبار واجهة المستخدم.

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

عيّنة

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