Coyote
Coyote عبارة عن مكتبة منصة منصة وأداة لاختبار رمز C# المتزامن والخلايا التي تتكاثر بشكل حتمي.
باستخدام Coyote ، يمكنك بسهولة اختبار التزامن وغيرها من nondeterminism في رمز C# الخاص بك ، من خلال كتابة ما نسميه اختبار وحدة التزامن . هذه تبدو مثل اختبارات الوحدة العادية ، ولكن يمكنها اختبار أعباء العمل المتزامنة بشكل موثوق (مثل الجهات الفاعلة أو المهام أو الطلبات المتزامنة إلى وحدات التحكم ASP.NET). في اختبارات الوحدة العادية ، يمكنك عادةً تجنب التزامن بسبب التقلب ، ولكن مع الذئاب ، يتم تشجيعك على تبني التزامن في اختباراتك للعثور على الأخطاء.
يتم استخدام Coyote من قبل العديد من الفرق في Azure لاختبار أنظمتها وخدماتها الموزعة ، ووجدت مئات من الأخطاء المتعلقة بالتزامن قبل نشر رمز في الإنتاج والتأثير على المستخدمين. على حد تعبير المهندس المعماري لخدمة Azure:
وجد Coyote العديد من المشكلات في وقت مبكر من عملية DEV ، وهذا النوع من المشكلات التي عادة ما تنزف في الإنتاج وتصبح مكلفة للغاية لإصلاحها لاحقًا.
يتم تصنيع الذئب مع ❤ بواسطة Microsoft Research.
النظر في الاختبار البسيط التالي:
[ Fact ]
public async Task TestTask ( )
{
int value = 0 ;
Task task = Task . Run ( ( ) =>
{
value = 1 ;
} ) ;
Assert . Equal ( 0 , value ) ;
await task ;
}
سيمر هذا الاختبار معظم الوقت لأن التأكيد سيتم تنفيذه عادة قبل بدء المهمة ، ولكن هناك جدول واحد حيث تبدأ المهمة بسرعة كافية لتعيين value
إلى 1
مما يؤدي إلى فشل التأكيد. بالطبع ، هذا مثال ساذج للغاية والخطأ واضح ، ولكن يمكنك أن تتخيل ظروف سباق أكثر تعقيدًا مخبأة في مسارات التنفيذ المعقدة.
الطريقة التي يعمل بها Coyote ، هي أنك تقوم أولاً بتحويل الاختبار أعلاه إلى اختبار وحدة التزامن باستخدام API TestingEngine
Coyote:
using Microsoft . Coyote . SystematicTesting ;
[ Fact ]
public async Task CoyoteTestTask ( )
{
var configuration = Configuration . Create ( ) . WithTestingIterations ( 10 ) ;
var engine = TestingEngine . Create ( configuration , TestTask ) ;
engine . Run ( ) ;
}
بعد ذلك ، تقوم بتشغيل أمر coyote rewrite
من CLI (عادةً كمهمة ما بعد البناء) لإعادة كتابة IL من ثنائيات الاختبار والإنتاج تلقائيًا. هذا يسمح لـ Coyote بحقن السنانير التي تتحكم في التنفيذ المتزامن أثناء الاختبار.
يمكنك بعد ذلك تشغيل اختبار الوحدة المتزامنة من إطار اختبار الوحدة المفضل لديك (مثل Xunit). سوف يتولى Coyote وتنفيذ الاختبار مرارًا وتكرارًا من البداية إلى النهاية لتكرارات N (في المثال أعلاه تم تكوين N إلى 10
). تحت الغطاء ، يستخدم Coyote استراتيجيات بحث ذكية لاستكشاف جميع أنواع مسارات التنفيذ التي قد تخفي خطأ في كل تكرار.
الشيء الرائع هو أنه بمجرد العثور على خطأ ، يمنحك Coyote تتبعًا من خلال engine.TestReport
API ، يمكنك استخدامه لإعادة إنتاج الخطأ بشكل موثوق كما تريد ، مما يجعل تصحيح الأخطاء وإصلاح المشكلة أسهل بشكل كبير.
البدء مع الذئاب سهل! أولاً ، اتبع هذا الدليل لتثبيت أداة سطر أوامر coyote
من Nuget. أنت الآن مستعد للتحقق من موقع Coyote للدروس التعليمية والوثائق والتعليمات والمعينات والمزيد من المعلومات حول المشروع. يتمتع!
ترقية تبعيات coyote
؟ تحقق من changelog هنا.
لاحظ أن Coyote هو مشروع مفتوح المصدر يتم توفيره "كما هو". نحن لسنا قادرين على تقديم أي دعم رسمي. بالنسبة لموظفي Microsoft ، لدينا قناة Friends of Coyote Teams ، وهو مجتمع داخلي يمكنه المساعدة في الإجابة على الأسئلة والتعلم من بعضهم البعض.
يرحب هذا المشروع بالمساهمات والاقتراحات. تطلب منك معظم المساهمات الموافقة على اتفاقية ترخيص المساهم (CLA) مع إعلان أن لديك الحق في ذلك في الواقع ، ويفعلنا في الواقع حقوق استخدام مساهمتك. لمزيد من التفاصيل ، تفضل بزيارة https://cla.opensource.microsoft.com.
عند إرسال طلب سحب ، سيحدد CLA Bot تلقائيًا ما إذا كنت بحاجة إلى توفير CLA وتزيين العلاقات العامة بشكل مناسب (على سبيل المثال ، فحص الحالة ، التعليق). ببساطة اتبع الإرشادات التي يقدمها الروبوت. ستحتاج فقط إلى القيام بذلك مرة واحدة عبر جميع المستودعات باستخدام CLA لدينا.
اعتمد هذا المشروع رمز سلوك المصدر المفتوح Microsoft. لمزيد من المعلومات ، راجع مدونة الشهادة الأسئلة الشائعة أو الاتصال بـ [email protected] مع أي أسئلة أو تعليقات إضافية.