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