هذه إعادة نشر لمقالتي على Medium.com على أمل الوصول إلى المزيد من مطوري OSS كجزء من #Hacktoberfest.
هل سبق لك أن اضطررت إلى التعامل مع الاختبارات المتوازية غير المستقرة التي تنجح في معظم الأوقات ولكن بعد ذلك تبدأ فجأة بالفشل بسبب أخطاء عشوائية غير متناسقة؟ هل اضطررت من قبل إلى إصلاح الاختبارات التي تشترك في نفس ملفات الموارد وتعديلها بالتوازي لإرباكك ونتائج اختباراتك الأخرى؟ هل أمضيت عددًا لا يحصى من الليالي في محاولة إعادة بناء مثل هذه التعليمات البرمجية بحيث يمكن موازنتها بشكل صحيح والحصول على نتائج مضمونة وقابلة للتكرار؟
هذا موضوع معقد وليس من السهل دائمًا حله، خاصة في قواعد التعليمات البرمجية الكبيرة الموجودة. ومع ذلك، فإن اتباع مجموعة بسيطة من القواعد يمكن أن يساعدك في تحقيق ذلك، ويهدف إطار عمل carlspring/idempotence إلى المساعدة في ذلك.
لكي تكون الاختبارات قابلة للتكرار طوال الوقت، تحتاج إلى التأكد من احتواء ملفات الموارد الخاصة بها وعزلها عنها فقط. ما يعنيه هذا هو أن كل اختبار يجب أن يمتلك موارد الاختبار الخاصة به بشكل حصري ولا ينبغي للاختبارات الأخرى تعديلها.
عجز الاختبار يعني أن اختباراتك ستعيد دائمًا نفس النتائج. بغض النظر عن عدد المرات التي تم تنفيذها وبغض النظر عن الاختبارات الأخرى التي يتم إجراؤها بالتوازي.
هذا إطار عمل خفيف الوزن يساعد في تحديد ونسخ ملفات موارد الاختبار بطريقة معزولة لاختبارات JUnit5 الخاصة بك. يتم تعريف موارد الاختبار باستخدام التعليقات التوضيحية ويتم نسخها في الدلائل الخاصة بها للمساعدة في تنفيذ فصل وعزل موارد الاختبار.
يتم تخزين جميع موارد الاختبار الشائعة ضمن دليل src/test/resources كالمعتاد. تحدد كل طريقة اختبار بعد ذلك الموارد التي تحتاجها باستخدام التعليق التوضيحي @TestResources. يقوم إطار العمل بنسخ هذه الموارد إلى دليل معزول لكل طريقة اختبار. وهذا يضمن أن لديه حق الوصول الحصري إلى الموارد التي يحتاجها، مما يمنع التداخل من الاختبارات الأخرى التي تعمل بالتوازي، بما في ذلك طرق الاختبار الأخرى في نفس فئة الاختبار.
لكل أداة بناء، هناك تبعية منفصلة تحتوي على منطق تحويل مرتبط بالمسار لتخطيط الدليل المحدد لتلك الأداة. (كمثال مبسط جدًا، من بين أمور أخرى. يضع Maven التعليمات البرمجية المضمنة ضمن الهدف، بينما يستخدم Gradle البناء لهذا الغرض؛ ويتم وضع الموارد بشكل مختلف، وما إلى ذلك). سيتم شرح المزيد عن هذا أدناه.
إليك الخطوة التي ستحتاجها للبدء.
سوف تحتاج إلى تحديد التبعية الخاصة بأداة البناء الخاصة بك. يمكنك التحقق من أحدث إصدار تم إصداره هنا.
testImplementation "org.carlspring.testing.idempotence:idempotence-gradle:1.0.0-rc-3"
testImplementation("org.carlspring.testing.idempotence:idempotence-gradle:1.0.0-rc-3")
org.carlspring.testing.idempotence idempotence-maven 1.0.0-rc-3 test
يجب أن يتم التعليق على فصل الاختبار الخاص بك باستخدام التعليق التوضيحي @ExtendWith(TestResourceExtension.class). هذا التعليق التوضيحي مسؤول عن النسخ الفعلي للموارد.
ستحتاج أيضًا إلى إضافة تعليق توضيحي إلى طرق الاختبار الخاصة بك باستخدام التعليق التوضيحي @TestResources لتحديد الموارد التي تحتاجها.
على سبيل المثال:
package com.foo; import org.carlspring.testing.idempotence.annotation.TestResource; import org.carlspring.testing.idempotence.annotation.TestResources; import org.carlspring.testing.idempotence.extension.TestResourceExtension; @ExtendWith(TestResourceExtension.class) class MyTest { @Test @TestResources({ @TestResource(source = "classpath:/foo.txt"), @TestResource(source = "classpath*:/**/bar.txt")} ) void testFoo() { // Perform whatever checks you need using these resources } }
سيتم إنشاء دليل لكل طريقة اختبار بالتنسيق التالي:
build/test-resources/MyTest-testFoo/nested/dir/foo.txt build/test-resources/MyTest-testFoo/bar.txt
target/test-resources/MyTest-testFoo/nested/dir/foo.txt target/test-resources/MyTest-testFoo/bar.txt
بهذه الطريقة، سيكون لدى اختباراتك المورد الذي تحتاجه منسوخًا في الأدلة المعزولة الخاصة بها. في هذه المرحلة، يمكنك تعديل موارد الاختبار هذه من طرق الاختبار التي تنتمي إليها ويجب أن تكون نتائجك غير فعالة، بشرط أن تعتمد فقط على الموارد القائمة على الملفات وليس على أنواع أخرى من الموارد المشتركة (قاعدة البيانات، خدمات الطرف الثالث، وما إلى ذلك).
يمكن العثور على وثائق مشروع Idempotence هنا.
يمكنك إلقاء نظرة على النظرة العامة المفاهيمية للحصول على شرح أكثر تفصيلاً لكيفية عمل الأشياء.
هذا مشروع جديد يشتمل على الوظائف الأساسية والبنية التحتية، ولكن المساعدة مرحب بها دائمًا.
يمكن للمساهمين الذين لديهم خبرة في JUnit وSpringframework وMkDocs المساعدة في تشكيل المشروع ببعض الأفكار والحلول الرائعة. نرحب أيضًا بالمتبنين الأوائل الذين يمكنهم تقديم تعليقات!
المشكلات التي تحمل عنوان hacktoberfest أو المساعدة المطلوبة متاحة للاستيلاء عليها ومن المفترض أن تساعدك على البدء بسرعة. يمكنك العثور عليها هنا.
أحد أهم الأشياء عند كتابة حالات الاختبار هي بيانات الاختبار التي ستستخدمها اختباراتك وإبقائها سليمة بين عمليات التشغيل. ومن خلال اتباع مجموعة من القواعد البسيطة لإبقاء هذه البيانات معزولة بين اختباراتك، يمكنك تحقيق التوازن والموثوقية في نتائجك.
يوفر مشروع carlspring/idmpotence إطار عمل سهل الاستخدام ومناسب لكل من المشاريع الجديدة وتراث إعادة البناء.
تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.
Copyright© 2022 湘ICP备2022001581号-3