البرمجة

حلول مشاركة اختبارات الأداء في مشاريع Android Studio متعددة الوحدات

في مشروع Android Studio الخاص بي، يوجد لديّ وحدتين من الوحدات البرمجية: وحدة foo-module وbar-module. يقوم كل منهما بتنفيذ مكتبة، حيث تقوم foo-module بتعريف واجهة استراتيجية، بينما تعتمد bar-module على foo-module وتنفذ مثل هذه الاستراتيجية. تحتوي foo-module على اختبارات استئناف (foo-module/src/androidTest/) لاختبار الشيفرة الأساسية باستخدام تنفيذ استراتيجية غير حقيقي، ويجب على bar-module أن تحتوي على اختبارات استئناف خاصة بها.

لقد قمت بتعريف فئة AbstractTests في foo-module/src/androidTest/ التي تقوم بمعظم الاختبارات الفعلية. كما أن لدي فئة StubTests في foo-module/src/androidTest/ التي تمتد من AbstractTests وتنفذ الطرق الضرورية لإكمال حالة الاختبار (توفير تنفيذ للاستراتيجية، وما إلى ذلك). كل هذا يعمل بشكل رائع.

في bar-module/src/androidTest/، قمت بإنشاء فئة BarStrategyTests، مصممة لتكون مرآة لـ StubTests، ولكنها تقدم استراتيجية مُنفَذة في bar-module. ومع ذلك، BarStrategyTests لا يستطيع رؤية AbstractTests، حتى على الرغم من أنني أضفت compile project(':foo-module') في ملف build.gradle الخاص بي، ويمكن للفئات الرئيسية (غير الاختبارية) في bar-module العمل بشكل جيد مع الفئات الرئيسية (غير الاختبارية) في foo-module. بمعنى آخر، بينما تتعامل التبعية project() مع الشيفرة العادية، إلا أنها لا تتعامل مع الشيفرة الموجودة في androidTest/. أواجه خطأ يفيد: “خطأ: الحزمة com.commonsware.foo.test غير موجودة”.

حاولت أيضاً إضافة androidTestCompile project(':foo-module')، ولكن بنفس النتيجة.

ما هي الوصفة لمشاركة شيفرة اختبار الأداة بين الوحدات؟

مؤقتًا، يمكنني استنساخ AbstractTests، ولكن هذا ليس حلاً جيدًا على المدى الطويل.

يمكنك مشاهدة هذا السؤال على Stack Overflow الذي يغطي موضوعًا مشابهًا للجافا العادية. هل جرب أحد الخيارات المذكورة في الإجابة الوحيدة وحقق نجاحًا مع اختبارات الأداة لنظام Android؟ يبدو أن الخيار الأول (نقل شيفرة الاختبار المشتركة إلى وحدة أخرى كشيفرة عادية غير اختبارية) قابل للتنفيذ، ولكن ليس لدي فكرة ما إذا كان الخيارين الآخرين سيعملان بشكل جيد مع إضافة البرمجة com.android.library بدلاً من إضافة البرمجة java.

المزيد من المعلومات

التحديات التي تواجه المطورين في مشاريع Android Studio قد تكون معقدة وتحتاج إلى حلاً دقيقاً وفعّالاً. في هذا السياق، يواجه المطور مشكلة في مشروع Android Studio الخاص به حيث يرغب في مشاركة رمز اختبار الأداء (Instrumentation tests) بين وحدتين منفصلتين في المشروع، وهما وحدة الـ “foo-module” ووحدة الـ “bar-module”.

تظهر المشكلة عندما يحاول المطور إنشاء اختبار أداء جديد في الـ “bar-module” ويرغب في استخدام كود الاختبار المشترك الذي تم تحديده في الـ “foo-module”. يحاول المطور استخدام الرمز المشترك الموجود في الـ “foo-module/src/androidTest/” ولكنه يواجه صعوبات في رؤية الكلاس الرئيسي المسمى “AbstractTests” من الـ “bar-module”.

يرجى التحقق من صحة استخدام الـ “compile project(‘:foo-module’)” في ملف “build.gradle” الخاص بالـ “bar-module”، حيث يبدو أنه لا يتعامل بشكل صحيح مع رموز الاختبار الأداء. يمكن أن يكون هناك حلاً مؤقتًا عند نسخ “AbstractTests” في الـ “bar-module”، ولكن هذا ليس الحلاقة النهائية ويمكن أن يؤدي إلى صعوبات في المستقبل.

المصدر الذي أشير إليه من قبل المطور يقدم بعض الخيارات المحتملة، ولكن يبدو أنه لم يتم تجربتها بشكل كاف. يمكن أن يكون إحدى الخيارات هي نقل رموز الاختبار المشترك إلى وحدة ثالثة كرموز غير اختبارية، وهذا قد يحل المشكلة. ومع ذلك، يحتاج المطور إلى التحقق من توافق هذا الخيار مع مكونات مشروع Android Studio وخاصة مع مكونات الـ “com.android.library” plugin.

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

زر الذهاب إلى الأعلى