الاختبار في استوديو Android والاختبار من سطر الأوامر يشرحان كيفية إعداد وتشغيل إعدادات الاختبار الأساسية. ومع ذلك، عندما يصبح تطبيقك ومتطلبات الاختبار فيه أكثر تقدمًا، قد تحتاج إلى تكييف إعدادات الاختبار بشكل أكبر. على سبيل المثال، قد تحتاج إلى إعداد اختبار متقدم عندما تريد إجراء ما يلي:
- إجراء الاختبارات المؤدّية إلى إصدار معيّن فقط من إصدار محدّد أو إلغاء إعدادات المظهر
- يمكنك تغيير نوع الإصدار الذي تُجري اختباراتك عليه أو ضبط خيارات Gradle.
- استخرِج اختبارات المعدات في وحدة الاختبار الخاصة بها.
- يمكنك إجراء اختبار أكثر تقدمًا كجزء من إعداد عملية الدمج المستمر.
تصف هذه الصفحة طرقًا مختلفة لتهيئة اختباراتك عندما لا تتناسب الإعدادات الافتراضية مع احتياجاتك.
إنشاء اختبار مُعدّ لنسخة الإصدار
وإذا كان مشروعك يتضمن إنشاء صيغ باستخدام مجموعات مصادر فريدة، يمكنك تضمين الاختبارات المساعِدة التي تتوافق مع مجموعات المصادر هذه. يحافظ هذا على رمز الاختبار منظمًا ويتيح لك إجراء الاختبارات التي تنطبق فقط على متغير إصدار معين.
لربط الاختبارات المُعدَّلة بنُسخة إصدار معيّن، يمكنك وضعها في مجموعة المصادر الخاصة بها، وهي متوفّرة على الرابط
src/androidTestVariantName
.
تتم مشاركة الاختبارات المضبوطة في مجموعة المصدر src/androidTest/
من خلال جميع صيغ الإصدارات. عند إنشاء ملف APK تجريبي لنسخة "MyFlavor" من تطبيقك، تجمع لعبة Gradle بين مجموعتي المصادر src/androidTest/
وsrc/androidTestMyFlavor/
.
لإضافة مجموعة مصدر اختبار لنسخة الإصدار في "استوديو Android"، يُرجى اتّباع الخطوات التالية:
- في نافذة المشروع، انقر على القائمة واختَر طريقة عرض المشروع.
- ضمن مجلد الوحدة المناسب، انقر بزر الماوس الأيمن على مجلد src وانقر على جديد > دليل.
- بالنسبة إلى اسم الدليل، أدخِل "androidTestVariantName". على سبيل المثال، إذا كان لديك إصدار إصدار باسم "MyFlavor"، استخدِم اسم الدليل
androidTestMyFlavor
. - انقر على حسنًا.
- انقر بزر الماوس الأيمن على الدليل الجديد واختر جديد > الدليل.
- أدخِل "java" كاسم الدليل، ثم انقر على OK (حسنًا).
يمكنك الآن إضافة اختبارات إلى مجموعة المصدر الجديدة هذه من خلال اتّباع خطوات إضافة اختبار جديد. عند الوصول إلى مربع الحوار اختيار دليل الوجهة، اختر مجموعة مصادر اختبار المتغيّر الجديدة.
يعرض الجدول التالي مثالاً لكيفية وضع ملفات اختبار قياس الأداء في مجموعات المصادر التي تتوافق مع مجموعات مصادر التعليمات البرمجية للتطبيق:
الجدول 1. رمز مصدر التطبيق وملفات اختبار الأدوات المقابلة
المسار إلى فئة التطبيق | مسار فئة اختبار قياس حالة التطبيق |
---|---|
src/main/java/Example.java
|
src/androidTest/java/AndroidExampleTest.java
|
src/myFlavor/java/Example.java
|
src/androidTestMyFlavor/java/AndroidExampleTest.java
|
تمامًا كما يحدث مع مجموعات مصادر التطبيقات، يتم دمج وتجاوز إصدار Gradle للملفات من مجموعات مصادر الاختبار المختلفة. في هذه الحالة، سيؤدي الملف
AndroidExampleTest.java
في مجموعة المصدر androidTestMyFlavor
إلى إلغاء
الإصدار الوارد في مجموعة المصدر androidTest
. وذلك لأن مجموعة مصدر نكهة المنتج
لها الأولوية على مجموعة المصدر الرئيسية.
عند اختيار نكهات مختلفة في أداة اختيار خيارات الإصدار، يتم عرض مجلدات androidTest
المناسبة في طريقة عرض Android لعرض المجلدات المستخدَمة:

MyFlavor
)،
وسيظهر المجلد androidTestMyFlavor
في طريقة العرض Android.لا يظهر المجلد androidTestMyFlavor
عند تحديد خيار مختلف:

OtherFlavor
)،
ولا يظهر المجلد androidTestMyFlavor
في طريقة العرض Android.يبدو هذا مختلفًا قليلاً إذا كنت تستخدم عرض المشروع، ولكن ينطبق المبدأ نفسه:

MyFlavor
)، لأنّ المجلد
androidTestMyFlavor
نشط في عرض المشروع.عند تحديد خيار مختلف، سيظل مجلد androidTestMyFlavor
مرئيًا، ولكن لن يتم عرضه كنشط:

OtherFlavor
)، لأنّ المجلد
androidTestMyFlavor
غير نشط في طريقة عرض المشروع.لمزيد من المعلومات عن كيفية دمج مجموعات المصادر، راجِع مجموعات المصادر.
ضبط إعدادات بيان الأدوات
يتم تضمين الاختبارات المساعِدة في ملف APK منفصل يتضمّن ملف AndroidManifest.xml
خاص بها. عندما تنشئ Gradle ملف APK التجريبي،
تُنشئ ملف AndroidManifest.xml
تلقائيًا وتضبطه
باستخدام العقدة
<instrumentation>
.
أحد الأسباب التي تجعل Gradle يضبط هذه العقدة لك هو التأكّد من أنّ
السمة targetPackage
تحدّد اسم الحزمة الصحيح للتطبيق الذي يخضع للاختبار.
لتغيير إعدادات أخرى لهذه العقدة، يمكنك إنشاء ملف بيان آخر في مجموعة مصدر الاختبار أو ضبط ملف build.gradle
على مستوى الوحدة، كما هو موضّح في نموذج الرمز التالي. يمكن العثور على القائمة الكاملة للخيارات في مرجع واجهة برمجة التطبيقات
BaseFlavor
.
رائع
android { ... defaultConfig { ... testApplicationId "com.example.test" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" testHandleProfiling true testFunctionalTest true } }
لغة Kotlin
android { ... defaultConfig { ... testApplicationId = "com.example.test" testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" testHandleProfiling = true testFunctionalTest = true } }
Each product flavor you configure can override properties in the
defaultConfig {}
block. To learn more, go to Configure product
flavors.
The properties in the snippet are:
Setting | Description |
---|---|
testApplicationId
|
Specifies the application ID for the test APK. |
testInstrumentationRunner
|
Specifies the fully qualified class name of the test instrumentation runner. |
testHandleProfiling
|
If set to true , enables the instrumentation class
to start and stop profiling.If set to false , profiling occurs the entire time
the instrumentation class is running. |
testFunctionalTest
|
If set to true , indicates that the Android system
should run the instrumentation class as a functional
test.The default value is false . |
Change the test build type
By default, all instrumentation tests run against the debug
build type.
You can change this to another build type by using the testBuildType
property in your module-level build.gradle
file. For example, if you want
to run your tests against your staging
build type, edit the file as
shown in the following snippet:
Groovy
android { ... testBuildType "staging" }
لغة Kotlin
android { ... testBuildType = "staging" }
ضبط خيارات اختبار Gradle
يتيح لك مكوّن Gradle الإضافي Android تحديد
خيارات معيّنة لجميع اختباراتك أو لبعضها فقط. في ملف build.gradle
على مستوى الوحدة، استخدِم كتلة
testOptions
لتحديد الخيارات التي تغيّر كيفية إجراء Gradle لجميع اختباراتك:
رائع
android { ... // Encapsulates options for running tests. testOptions { reportDir "$rootDir/test-reports" resultsDir "$rootDir/test-results" } }
لغة Kotlin
android { ... // Encapsulates options for running tests. testOptions { reportDir "$rootDir/test-reports" resultsDir = "$rootDir/test-results" } }
تغيّر السمة reportDir
الدليل الذي تحفظ فيه أداة Gradle تقارير الاختبار. يحفظ Gradle تلقائيًا تقارير الاختبارات في
دليل path_to_your_project/module_name
/build/outputs/reports/
. تحدّد $rootDir
المسار المرتبط
بالدليل الجذري للمشروع الحالي.
تغيّر السمة resultsDir
الدليل الذي يحفظ فيه Gradle نتائج الاختبار. تحفظ أداة Gradle تلقائيًا نتائج الاختبار في دليل path_to_your_project/module_name
/build/outputs/test-results/
. تحدّد $rootDir
المسار المرتبط
بالدليل الجذري للمشروع الحالي.
لتحديد خيارات اختبارات الوحدات المحلية فقط، يمكنك ضبط مجموعة
unitTests
داخل testOptions
.
رائع
android { ... testOptions { ... // Encapsulates options for local unit tests. unitTests { returnDefaultValues true all { jvmArgs '-XX:MaxPermSize=256m' if (it.name == 'testDebugUnitTest') { systemProperty 'debug', 'true' } ... } } } }
لغة Kotlin
android { ... testOptions { ... // Encapsulates options for local unit tests. unitTests { returnDefaultValues = true all { jvmArgs = listOf("-XX:MaxPermSize=256m") if (it.name == "testDebugUnitTest") { systemProperty = mapOf("debug" to "true") } ... } } } }
بشكل تلقائي، تُطرح اختبارات الوحدات المحلية استثناءً في أي وقت يحاول فيه الرمز
الذي تختبره الوصول إلى واجهات برمجة تطبيقات نظام Android الأساسي، إلا إذا
اشرحت حول تبعيات Android
بنفسك أو باستخدام إطار عمل اختبار مثل
Mockito. مع ذلك، يمكنك تفعيل السمة returnDefaultValues
بحيث يعرض الاختبار إما القيمة "فارغ" أو "صفر" عند الوصول إلى واجهات برمجة تطبيقات النظام الأساسي،
بدلاً من طرح استثناء.
تضم مجموعة all
خيارات للتحكم في كيفية تنفيذ Gradle لاختبارات الوحدات المحلية. للحصول على قائمة بجميع الخيارات التي يمكنك تحديدها، يُرجى الاطّلاع على المستندات المرجعية لمنصة Gradle.
تحدّد السمة jvmArgs
وسيطات آلة متجه الدعم
لاختبارات آلة متجه الدعم.
يمكنك أيضًا التحقق من اسم المهمة لتطبيق الخيارات على الاختبارات التي
تحددها فقط. في مثال المقتطف، تم ضبط السمة debug
على true
ولكن لمهمة testDebugUnitTest
فقط.
استخدام وحدات اختبار منفصلة للاختبارات المعدّة
إذا أردت الحصول على وحدة مخصصة للاختبارات الآلية، لعزل باقي التعليمات البرمجية عن اختباراتك، قم بإنشاء وحدة اختبار منفصلة وضبط إصدارها على غرار تلك الموجودة في وحدة المكتبة.
لإنشاء وحدة اختبار، يُرجى اتّباع الخطوات التالية:
- أنشئ وحدة مكتبة.
- في ملف
build.gradle
على مستوى الوحدة، طبِّق المكوِّن الإضافيcom.android.test
بدلاً منcom.android.library
. - انقر على مشروع المزامنة
.
بعد إنشاء وحدة الاختبار، يمكنك تضمين رمز الاختبار في مجموعة المصادر الرئيسية أو مجموعة المصادر (على سبيل المثال، src/main/java
أو src/variant/java
). إذا كانت وحدة التطبيق تحدد نكهات منتجات متعددة، يمكنك إعادة إنشاء هذه النكهات في وحدة الاختبار.
باستخدام إدارة التبعية الواعية للمتغيرات، تحاول وحدة الاختبار اختبار النكهة المطابقة في الوحدة المستهدفة.
تحتوي وحدات الاختبار تلقائيًا على صيغة تصحيح الأخطاء واختبارها. ومع ذلك، يمكنك إنشاء أنواع إصدار جديدة لتتناسب مع مشروع التطبيق الذي تم اختباره. لجعل
وحدة الاختبار تختبر نوع إصدار مختلف وليس نوع تصحيح الأخطاء، استخدِم
VariantFilter
لإيقاف صيغة تصحيح الأخطاء في المشروع التجريبي، كما هو موضّح:
رائع
android { variantFilter { variant -> if (variant.buildType.name.equals('debug')) { variant.setIgnore(true); } } }
لغة Kotlin
android { variantFilter { if (buildType.name == "debug") { ignore = true } } }
إذا كنت تريد أن تستهدف وحدة اختبارية نكهات معيّنة فقط أو تنشئ أنواعًا معيّنة من التطبيق، يمكنك استخدام السمة matchingFallbacks
لاستهداف الصِيَغ التي تريد اختبارها فقط. هذا أيضا يمنع وحدة الاختبار من الاضطرار
إلى تهيئة هذه المتغيرات لنفسها.