traceoutput">

اختبار ديناميكي العقد مع اياكس

الترميز العقد باستخدام تجارب التنمية المدفوعة باعتبارات تقنيات

الترميز العقد باستخدام رشيقة واختبار يحركها تقنيات التنمية يتطلب كتابة عدد من الاختبارات وتنفيذ aMock عنوان طبقة. مشكلة تحتاج إلى رمز العقد باستخدام هذه التقنيات التنمية. الحل وللتدليل ، دعونا تحديد حالة استخدام ، وتنفيذ حالة استخدامها عقد والكتابة حالة اختبار (ق) لتنفيذ العقد ، وتنفيذ العقد في عنوان موك ، وأخيرا تشغيل الاختبار ، ومثال على ذلك هو XMLHttpRequest القائم ، وعلى الأرجح سوف يتم استخدام XMLHttpRequest الخاصة بك لاغراض الاختبار. ومع ذلك ، فإن العقد وعناوين وهمية ليست متكاملة بشكل صريح إلى العميل أو رمز الخادم ، بحيث يمكنك التحقق من أي عميل. هذه المقالة هي عن بناء خدمات الويب ، ويمكنك استدعاء خدمات ويب من قبل العميل XMLHttpRequest ، من قبل عميل المزج ، أو من جانب بعض من جانب الملقم خدمة ويب مجمع. المثال ميزات آلة حاسبة تطبيق يحتوي فقط على عملية واحدة تستخدم لإضافة اثنين الأرقام معا. ما الذي يجعل العملية حاسبة فريدة من نوعها هو أنه يستخدم عناوين مؤقتة للحفاظ على التاريخ من الإضافات الماضية.

في حالة استخدام هو إضافة رقمين ، ولكن أمرين يجب أن يحدث للاضطلاع حالة استخدام : توجيه وبالإضافة إلى ذلك ، وتفاصيل لإدارة إعادة توجيه ليست مشمولة هنا ولكن لن تكون مشمولة في المقطع التالي بعنوان "اختبار حيوي العقد "كيف يتم تحديد عنوان مؤقت يندرج في هذه الفئة من الغبار عابث ، لذلك دعونا نركز على تفاصيل العقد الذي ينفذ بالإضافة إلى ذلك. التالية يمثل طلب المتشعب استخدامها لأداء بالإضافة إلى ذلك :

الوظائف / services/calculatorrest/operations/2364564565 HTTP/1.1 المحتوى من نوع : تطبيق / json عامل المستخدم : جاكرتا Commons-HttpClient/3.0 المضيف : مضيف : 8100 المحتوى المدة : 25

في طلبها ، وظيفة النص المتشعب يتم تنفيذه ، وعنوان الموقع هو استخدام عنوان مؤقت وجدت في تجربة إعادة التوجيه. والنص المتشعب رؤوس المحتوى ونوع المحتوى المدة ليست اختيارية ، وتستخدم لتحديد نوع وطول محتوى إرسالها مع طلب الوظائف. الهيئة الطلب يحتوي على العازلة المشفرة باستخدام جافا سكريبت كائن التأشير (جسون).13 اثنين من أعضاء بيانات محددة في طلب جسون : number1 وnumber2. اثنين من أعضاء هذه البيانات تمثل الأرقام التي يمكن ان تضاف. ويبين الجدول التالي الرد المناسب :

HTTP/1.1 200 محتوى موافق من نوع : تطبيق / json المحتوى المدة : 14 خادم : جيتي (6.0.x) ( "نتيجة" : 3)
  

المحتوى رؤوس نوع المحتوى والمدة تصف محتوى التي يتم إرجاعها ، والتي يتم ترميز باستخدام جسون ويحتوي على بيانات واحد الاعضاء. عضو واحد من البيانات النتيجة هي نتيجة إضافة رقمين معا. وأنت تنظر في طلبات وردود فعل بعض الرياضيات والعقلية ، فستعرف مضيفا أن النتائج 1 و 2 في مجموع 3. من منظور العقد ، فإنه يبدو أن كل شيء على ما يرام ، وأنه ينفذ النظام ويعمل. في الواقع ، ومع ذلك ، يتضح من النص المتشعب المحادثات كانت كلها مزورة. هذا يقودنا إلى السؤال التالي : عندما وضع العقد ، وكيف يمكن تعريف العقد جسديا؟ خالصة ويمكن القول ، "ان العقد تم تعريفها باستخدام نوع من أداة إلى أن العميل والخادم المبرمجين ثم تنفذ." الجواب خالصة تبدو جيدة وسيكون رائعا إذا كانت هذه الأداة موجودة. للأسف ، لا تتيح لك أداة لتصميم بقية مقرها المتشعب المحادثات التي يمكن أن تكون أساسا للاختبار وموك عنوان طبقة ، وأمام حقيقة ان كنت لا تملك مثل هذه الأداة ، باستخدام محرر لتوليد الحديث المتشعب يدويا لا يصدق هو عرضة للخطأ ومملة. أنا لا أقترح أن أحدا يجب أن نفعل ذلك. ومع ذلك ، ما زالت هناك حاجة لتعريف العقد ، ولكن لا يمكنك ان تفعل ذلك من دون أداة أو محررا. دون أي نوع من أنواع الوثائق ، والعقد لا يزال حرفيا من نسج الخيال.

 المصدر : / jaxson / الجذع / الانترنت / الجذر / مخطوطات / قوالب / testcontract.html  عقد صفحة اختبار 

الاختبارات المتوفرة

testManager.runAll () "نوع =" الزر "القيمة =" تشغيل جميع التجارب "/>
اختبار حالة
testManager.testPrototype () "نوع =" الزر "القيمة =" اختبار النموذج الأولي "/> لا تعمل
ساعة /> الجدول الحدود = "1">

إخراج التتبع

رمز طويلة نسبيا ، حتى لقد سلطت الضوء على عناصر هامة لجعلها أسهل للفهم. رمز الاختبار يستخدم العلامة النصي لتشمل عددا من الملفات جافا سكريبت التي توفر الأساس للرمز الاختبار. بعد تحميل البرنامج النصي الأساس ، وأول قطعة من أبرز setJsUnitTracer رمز إعادة توجيه التحذيرات ولدت وإعلامية ورسائل التصحيح إلى الصفحة الحالية أتش تي أم أل. على وجه التحديد ، والناتج يتم إنشاؤها في العنصر الجدول مع traceoutput معرف ، والذي يظهر في جريئة في الجزء السفلي من الكود.

وأخرى جريئة شفرة المصدر هو المتغير baseURL ، وهو ما يمثل متغير تشير عناوين العقد الذي سيتم استخدامه في اختبار البرنامج النصي. من المهم أن تحدد جميع عناوين العقد في هذا المجال بحيث أنه من الواضح عناوين المواقع التي تحتاج إلى الدعم. إذا كان عنوان لا يمكن أن يحدد في وقت مبكر بسبب طبيعتها الدينامية ، ثم قمت بتعريف متغير وتعيين سلسلة فارغة. والقطع القادمة من النص جريئة تمثل المتغير (testsToRun) وظيفة (testPrototype). testPrototype وظيفة هو على سبيل المثال كيف يمكن كتابة الاختبار. تذكر هذه الخطوات الهامين : استخدام متزامن ، واستدعاء testManager.success الأسلوب. متزامن هي فئة المساعد الذي يجعل متزامن XMLHttpRequest المكالمة. عادة ، في التطبيقات التي قد تستخدم الطبقة غير متزامن ، مما يجعل المكالمات XMLHttpRequest غير متزامن. دعونا نلقي نظرة على الاختلافات بين طلبات متزامنة ومتزامن ، ومناقشة لماذا كنت تختار إما.

عندما XMLHttpRequest يستخدم لتقديم طلب متزامن ، XMLHttpRequest ينتظر استجابة قبل أن تعود السيطرة للمتصفح. بعد XMLHttpRequest ينتظر الإجابة هي مشكلة ، لأن جافا سكريبت ليست مؤشرات ، مما تسبب في المتصفح لقفل. لأفضل تجربة للمستخدم ، يجب عليك دائما استخدام طلبات متزامنة. باستخدام طلبات متزامنة له مشاكله الخاصة. طلب غير المتزامن لا تنتظر الرد ، ويعود التحكم إلى تشغيل الجافا. عندما اختبارات التشغيل ، طلبات متزامنة هي مشكلة لأن الاختبارات يتم تنفيذها بالتتابع ، وليس بشكل متزامن. عند كتابة رمز اياكس والراحة ، واستخدام القاعدة التالية من الإبهام : استخدام طلبات متزامنة لتقديم الطلبات ، واستخدام طلبات متزامن للاختبار. وصول الى العودة الى وظيفة testPrototype سبيل المثال ، يجب على كل وظيفة اختبار بيان ما إذا كانت أو لم تكن تجربة ناجحة.

هذا هو المطلوب ، لانه عندما يعمل مدير اختبار جميع التجارب والاختبار القادم سيتم تشغيل فقط عندما يكون الاختبار الحالي بنجاح. على سبيل المثال ، هو نجاح testManager.success عندما يتم استدعاء الأسلوب. استدعاء الأسلوب فشل يشير إلى فشل ، وأسلوب الانتظار يشير إلى أن اختبار ينطوي على خطوات متعددة ويحتاج الى الانتظار للحصول على رد قبل تحديد نجاح أو فشل. الانتقال ، في سبيل المثال أتش تي أم أل شفرة مصدر الملف ، الأسلوب testManager.setTestCases اقترانا الاختبارات مع مدير الاختبار. مدير اختبار بالتكرار عبر كافة الاختبارات المحددة في testsToRun متغير ويخلق الوكيل الذي هو تغليف لطريقة حددت أصلا. يمكنك قراءة المزيد حول هذا الموضوع في المادة (2). عندما اختبارات التشغيل ، لا مرجع testsToRun متغير ، وإنما مدير اختبار testManager متغير. وبعد setTestCases مدير اختبار الأسلوب اكتمال التهيئة ، يمكنك تنفيذ الاختبارات. في المثال أتش تي أم أل شفرة المصدر ، والجداول)

) بشكل حيوي يعرف أن يتضمن إشارات إلى تلك التجارب. الجدول الأول يحتوي على أزرار تستخدم لتنفيذ هذه التجارب بانها جماعة أو فرادى. لتشغيل كافة الاختبارات ، استدعاء testManager.runAll الأسلوب (). لتشغيل تجربة فردية ، تنفيذ testManager الأسلوب. [testname]. الجدول الثاني يستخدم لتوليد وانتاج قطع الأشجار.

دعونا أول اختبار لإعادة توجيه وعلاوة على ذلك ، كما يتضح ذلك من المقتطف التالي رمز.

 المصدر : / jaxson / الجذع / الانترنت / الجذر / آلة حاسبة / testcontract.html فار entityURL = "" ؛ testsToRun فار = (testVerifyAdd : الدالة () (معلومات ( "testVerifyAdd" ، "الجري testVerifyRedirection الأولى") ؛ testsToRun.testVerifyRedirection () ؛ معلومات ( "testVerifyAdd" ، "التشطيب تشغيل testVerifyRedirection") ؛ الدولة فار = كائن جديد () ؛ state.number1 = 1 ؛ state.number2 = 2 ؛ العازلة فار = JSON.stringify (الدولة) ؛ معلومات ( "testVerifyAdd" ، "جسون العازلة ( "+ + العازلة")")؛ طلب فار = متزامن الجديدة () ؛ request.complete = وظيفة (statusCode ، statusText ، responseText ، responseXML) (فار استجابة = JSON.parse (responseText) ؛ معلومات ( "testVerifyAdd.complete "،" أضف النتيجة ( "responseText + +")")؛ assertEquals ( "جسون نتيجة" ، 3 ، response.result) ؛ testManager.success ( "addTest") ؛) request.POST (entityURL ، "التطبيق / json" ، Buffer.Length ، عازلة) ؛)) ؛... 

مقتطف الشفرة يوضح شفرة جافا سكريبت الذي يحتوي على اختبار ، ومقتطف أتش تي أم أل يوضح كيفية استدعاء الاختبار التي حددتها جافا سكريبت. المراجع entityURL متغير عنوان الموقع العقد استخدامها لأداء بالإضافة إلى ذلك. المتغير لم يتم تعيين موقع محدد مسبقا ، لأن العنوان هو خلق ديناميكية في اختبار آخر لم يتضح في المقتطف. الواردة ضمن تعريف testsToRun المتغير هي وظيفة testVerifyAdd الذي يمثل اختبارا يستخدم لإجراء بالإضافة إلى ذلك ، لتشغيل الاختبار ، مدير اختبار يستدعي حيوي يعرف طريقة testManager. testVerifyAdd ، والذي يدعو testsToRun.testVerifyAdd. الغرض من إنشاء وكيل لهذا الاختبار كما هو لتمكين المدير اختبار لإدارة تسخير الاختبار الذي يستدعي اختبار ، وفي تنفيذ testVerifyAdd ، الذي لا يتضح testVerifyRedirection يسمى اختبار. وينفذ testVerifyRedirection للتحقق من أن متغير entityURL سوف مرجع عنوان صالح. لاحظ كيف أن الاختبار لم يتضح المشار إليها باستخدام testsToRun متغير وليس testManager.

في وقت سابق ، ذكرت أنه يجب عليك الاتصال testManager لتشغيل اختبار ، وليس الاختبار مباشرة. وبحكم التجربة التي لا تنطبق إلا إذا كنت تريد تشغيل اختبار والتي لا قيد الاختبار. السبب الرئيسي لأنك لن تستخدم testManager هو أنه إذا كان هناك استثناء ولدت ، كنت ترغب في اختبار قيد التشغيل حاليا للخروج. الدعوة لاختبار باستخدام testManager ضمن نتائج الاختبار في استثناء يجري صيدها ، والتجربة الحالية مستمرة كما لو كان كل شيء يسير موافق. بطبيعة الحال ، هذا لا يعني أنك قد لا تريد هذا السلوك ، ويمكن لك أن تسمي اختبارا من testManager. والخيار لك ، ولكنها لمزيد من المهم أن نفهم سبب يدعو كل منها. وبعد أن دعا الذي لا يتضح testVerifyRedirection الاختبار ، واختبار أداء مهمة بالإضافة إلى ذلك بدأت. الاختبار سيتم التحقق من أن إضافة 1 و 2 من نتائج في قيمة 3. يتم تخزين البيانات في جافا سكريبت مثيل كائن الدولة التي قمت مثيل وتعيين. كنت تسلسل حالة من الاعتراض على شكل جسون باستخدام الأسلوب JSON.stringify.

بمجرد تحويل الدولة إلى العازلة السلسلة ، وإرساله إلى الخادم باستخدام request.POST الأسلوب. وrequest.POST الأسلوب هو النص المتشعب طلب الوظائف ، وتلبية متطلبات الراحة. عندما يستجيب request.POST الأسلوب ، أسلوب request.complete يسمى. المجهول في تنفيذ طريقة request.complete ، وعاد العازلة يتم تنسيق باستخدام جسون. لتحويل العازلة جسون إلى دولة ، يمكنك استدعاء الأسلوب JSON.parse. قمت بتعيين الدولة عادت إلى استجابة متغير. الدولة يحتوي على قيمة علاوة على ذلك ، وقيمة يتم اختباره باستخدام الأسلوب assertEquals. إذا لم تكن القيمة 3 ، ثم في إطار اختبار مشغلات الصيد ، وعمليات استثناء. وإما سبيل المثال ، يمكنك أن ترى الذي نجحت التجارب والاختبارات التي فشلت. عندما فشل الاختبار ، وهي ولايات خطأ لماذا فشلت في الاختبار. بالإضافة إلى ذلك ، رسائل إعلامية يتم إنشاؤها حتى يتسنى لك معرفة ماذا يفعلون بك الاختبارات والبيانات ما يجري إرسالها. الاختبار كما هو مكتوب في اختبار واحد و لا يشكل إتمام عقد الاختبار. عند تنفيذ العميل تجارب الجانب من العقد الخاص بك ، فأنت تريد أن توظف اختبار يحركها تطوير التقنيات التي تشمل الاختبارات التي تنجح والاختبارات التي تفشل. دعنا الآن تحول التركيز من جانب العميل إلى جانب الملقم. كنت لا تريد لتنفيذ كامل العمل الخادم تنفيذ الجانب ، وإنما تنفيذ موك عنوان طبقة.

لنطاق هذا الحل ، ويتم استخدام جافا. والغرض من هذا العنوان طبقة موك هو تقليد وتنفيذ وظيفة الخادم الجانب. التشبه وتنفيذ وظيفة الخادم الجانب هو صعب ، لأنه يمكنك فقط تنفيذ استهدفت حالات الاختبار. في حالة المثال ، وهذا يعني تطبيق حالة مضيفا 1 و 2. بطبيعة الحال ، إضافة 1 و 2 هو تافهة ، وفي حالة رابط موك ، هل يمكن تنفيذ ذلك في غضون ثوان. ومع ذلك ، هناك حالات أكثر تعقيدا ، لذلك يجب عدم الوقوع في إغراء لإيجاد حل. وتركز موك عنوان طبقة هو تقديم الطلبات والاستجابات الصحيحة لاجراء اختبارات معينة. من خلال تنفيذ المنطق ، وكنت وضع نفسك للخطأ لأن المنطق بحاجة إلى اختبارها. دعونا نضع الامر بهذه الطريقة : تخيل تنفيذ بالإضافة تافهة من رقمين. كيف تعرف أن لديك تنفيذ ستعمل بشكل صحيح؟ والجواب هو ان تكتب الاختبارات. ومع ذلك ، فإن هذا لا يجيب على السؤال بشكل صحيح ، لأن كيف يمكنك أن تعرف أن التجارب التي تنفذ بشكل صحيح؟ والجواب هو ان لم تقم بذلك ، وهذا هو الغرض من موك عنوان طبقة. وفيما يلي شفرة المصدر ينفذ الطلب والاستجابة لإضافة العقد.

 المصدر : / jaxson.java.tests / devspace / jaxson / التجارب / آلة حاسبة / mockurl / DoMockAdd.java الفئة العامة DoMockAdd يمتد MockUrlTestCaseBase (الجمهور باطلة processRequest (HttpServletRequest الطلب ، استجابة HttpServletResponse) رميات ServletException ( assertAreEqualJSONObject (الطلب ، "requestadd.json") ؛حاول ( FileWriter.writeFileObject ( "التطبيق / json" ، ردا على ذلك ، "responseadd.json") ؛) التقاط استثناء ه) (رمي ServletException الجديدة ( "لا يمكن كتابة ملف استجابة" ، ه) ؛) response.setStatus (200) ؛))

مكالمتين طريقة تظهر بالخط العريض. ويقارن assertAreEqualJSONObject طريقة تخزين البيانات المرسلة من قبل بريمج جافا الى requestadd.json الملف. إذا كانت البيانات المرسلة يطابق محتويات الملف ، ثم التي تليها طريقة استدعاء writeFileObject يتم تنفيذه. الغرض من writeFileObject هو ارسال محتويات responseadd.json الملف إلى العميل. وrequestadd.json الملفات وresponseadd.json تمثل عقود محددة مسبقا تستخدم لإضافة رقمين معا. الطبقة DoMockAdd ليس لديه فكرة ما هو الغرض من العملية هو. إلا أنه يعلم أنه إذا طلب مباريات ملف ، ثم ردا على أساس آخر يتم إرسال الملف. وموك رابط تنفيذ طبقة بسيطة ، لكنها لا يمكن إلا أن التعامل مع قضية واحدة مشيرا الى ان اثنين من أرقام محددة ، وتوليد رد فعل واحد. في موك عنوان طبقة سبيل المثال ، يمكنك اجراء عدة اختبارات لمعرفة أي حالة اختبار يتم مطابقة. إذا كان اختبارا لا يوازيه ، ثم يتم إرسال الرد المناسب. اذا لم يتم اختبار الحالات المباريات ، ثم يتم إرسال أي رد ، ويتم إنشاء خطأ.

وassertAreEqualJSONObject الأسلوب يقارن جسون البيانات التي يتم إرسالها إلى البيانات جسون في ملف. لا يمكن تضليله للاعتقاد بأن بايت إلى المقارنة البايت هي التي يؤدونها. وassertAreEqualJSONObject طريقة تنفيذ مقارنة منطقية تقوم على تنسيق البيانات. هذا مهم جدا لأنه على خلاف ذلك ، بيضاء أو الشخصيات الأخرى التي لا تؤثر على حالة البيانات التي يمكن أن يتسبب في فشل الاختبار. كنت لا تريد اختبار بالفشل بسبب وجود تنسيق مختلف ، ما لم بالطبع لكم رغبة اختبار تنسيق معين من البيانات. على سبيل المثال ، إكس إم إل آخر التكنولوجيا ، حيث من المرجح أنك لا تريد أن تسبب بيضاء الاختبار فشل. بعد أن كنت قد أنشأت طبقة رابط موك ، يمكنك اختبار البرامج النصية العميل ، والتي سوف تحقق من العقود. استنادا إلى العمل العميل والخادم الجانب ، في العمل كبديل عميل العمل أو تنفيذ الخادم لا ينبغي تغيير السلوك. إذا تم تغيير السلوك ، ثم العميل واختبار البرامج النصية موك رابط تطبيقات غير متناسقة. تريد لديها العميل أو الخادم لنعرف ما اذا كان يعمل ضد اختبار أو التنفيذ الفعلي ، وعليك أن تتذكر النقاط التالية عند إنشاء العقود :

• وموك عنوان طبقة ويمثل العقد النهائي بين العميل والخادم.

• وموك عنوان طبقة بتنفيذ العقود باستخدام ملفات سلفا للطلبات والردود.

• وموك عنوان طبقة لا يمكن إلا أن التجربة استهدفت حالات الاختبار ويجب عدم استخدام أي رمز التي سيتم استخدامها في التنفيذ ، لأن المنطق قد يكون الخلل.

• وعند مقارنة البيانات المرسلة مع البيانات الموجودة في الملف ، واستخدام المقارنة المنطقية وليس بايت إلى المقارنة بايت. وقال بايت إلى المقارنة بايت يمكن أن يسبب بيضاء ، والذي ليس له اي علاقة مع الدولة للكائن ، وسيكون اختبارا لسبب الفشل. استثناء لهذه القاعدة هو إذا كان الاختبار يتطلب التحقق من وبيضاء.

• وموك رابط الطبقة يؤدي اختبارات متعددة على الطلب التي يتم إرسالها ويرسل ردا مناسبا. في معظم الحالات ، على طلب يتم اختباره باستخدام ملف ، وردا على أساس ملف آخر.

• إذا كان يجب تنفيذ المنطق في موك عنوان طبقة ، تأكد انه اختبار جيد للغاية ومستقرة ، كما أن التنفيذ سيكون بمثابة مرجع لكيفية العقد بين العميل والخادم وظائف.

• العميل تجارب الجانب والتي تختبر مدى العقد يمثل تنفيذ كيفية استخدام العقد وتستخدم للتحقق من صحة الملقم تنفيذ الجانب.

• يمكنك وضع العميل تجارب العقد الجانب وموك عنوان طبقة معا باستخدام تقنيات التنمية testdriven.

• يمكنك تنفيذ العميل تجارب العقد الجانب في أي لغة برمجة ، ولكن منذ هذه المادة ، وعلى الأرجح هي التطبيق الخاص بك جافا سكريبت ومقرها ، فإنه من المنطقي استخدام جافا سكريبت.

• ولا العميل ولا تطبيقات الخادم الجانب أو الاختبارات يجب أن يكون أي تبعيات من أي وقت مضى على بعضها البعض. بهذه الطريقة ، يمكنك استبدال اختبارات العميل مع تنفيذ العميل دون التسبب في مشاكل في موك عنوان طبقة أو تنفيذ الملقم.1 - 4.Testing على العقد الحيويفي المثال السابق ، الذي يوضح كيفية إنشاء العقد ، لا تغطي جانبا ديناميا من العقد ، ومشكلة إعادة التوجيه على وجه الخصوص. إعادة التوجيه ليست مشمولة لأن إعادة توجيه جزء من مشكلة اكبر هي جزء من اياكس امستردام الهولندي وبقية النموذج. مشكلة تحتاج إلى اختبار على العقد الذي هو حيوي. والحل "فهم وتعريف الفلسفة من اياكس" القسم جادل بأن يسمح اياكس لك لخلق والتلاعب محتوى ديناميكي. دينامية يمتد إلى العقد ، والتي يمكن أن تنطوي على الأساليب التالية :

• تحديد موقع محدد على أساس رابط عامة

• تعريف محتوى معين يستند إلى عنوان محدد وفي كلتا سبيل المثال ، عنوان عام أو مرجعية عامة المحتوى الثابت ترميز أو الإشارة إليه في جانب العميل. الثابت ترميز إشارة عامة ومن ثم تحويلها إلى إشارة محددة. لفهم ما ينطوي عليه ، دعونا نركز على سبيل المثال آلة حاسبة ، وتوجيه جزء من هذه العملية فضلا عن ذلك. رمز يمثل ما يلي النص المتشعب الذي طلب العميل من شأنه أن يجعل لتحويل عامة بالإضافة إلى رابط العملية عملية محددة بالإضافة إلى ذلك العنوان : الحصول على / الخدمات / calculatorrest / عمليات HTTP/1.1 عامل المستخدم : جاكرتا Commons-HttpClient/3.0 المضيف : مضيف : 8100 المتشعب هو الحصول على تنفيذها ، وعنوان / الخدمات / calculatorrest / عمليات يسمى باستخدام النص المتشعب 1.1 البروتوكول. هذا الجزء من الطلب هو مطلوب. على سبيل المثال ، رؤوس المتشعب غير مطلوبة ، ولكن لتنفيذ نمط Permutations14 ، رؤوس الأرجح مطلوبة. لهذا الاختبار ، فإن الاستجابة المطلوبة هي كما يلي :

HTTP/1.1 201 + أ + إعادة توجيه المستخدم المكان : / services/calculatorrest/operations/2364564565

وردا تبدو غريبة بعض الشيء ، لأن رمز المتشعب 201 وليس 307 أو 302 ، يتم إرجاع. وبالنسبة لأولئك القراء الذين لديهم أي فكرة عما رموز استجابة يعني ، اسمحوا لي توضيح. إذا قمت بتقديم طلب وخادم تريد توجيهك إلى موقع مؤقت الحقيقية ، ثم يمكنك استخدام رمز استجابة في سلسلة 3xx. في حالة تطبيق آلة حاسبة ، وتوجيه مؤقت ، وبالإضافة إلى ذلك العديد من العمليات يمكن أن يؤديها. ولذلك ، فإن الرد المناسب أن يكون إما 307 أو 302. ومع ذلك ، ليس هذا هو الجواب الصحيح لأسباب متعددة. العائدون إما 307 أو 302 لا يصح في هذه الحالة وذلك للأسباب التالية :

• متصفح يجعل توجيه تلقائيا ، وبالتالي لا يعطي XMLHttpRequest كائن توجيه موقع.

• ممارسة أنشطة لإعادة التوجيه التلقائي ليست مفيدة ، لأنك قد تحتاج إلى تنفيذ استعلامات متعددة ولن ترغب في تنفيذ إعادة توجيه متعددة.

• عند تقديم طلب على رابط قاعدة ، أنت لا تفعل إعادة توجيه إلى مورد معروف ، وإنما خلق من الموارد التي تحتاج إلى إعادة توجيه ل. وفي الشبكة العالمية (W3C) المتشعب 1.1 مواصفات ، واستجابة 201 رمز يستخدم للإشارة إلى أن الدعوة للعنوان الأصلي قد خلق موارد جديدة يمكن الرجوع إليها في موقع جديد ، والتي تم تعريفها في المكان المتشعب الرأس. ولذلك ، حتى ولو كنت قد استخدمت 307 أو 302 ، والجواب هو أكثر ملاءمة 201. ومن وجهة نظر التنفيذ ، المعرف 2364564565 يتم إنشاؤها وحيوي لا يمكن التنبؤ بها. من منظور الاختبار ، وهذه مشكلة لأنه لا يمكنك كتابة اختبارا لمعرف 2364564565. لو كنت لتفعل ذلك ، وكنت انتهاكا لمبدأ القدرة على استبدال عنوان موك طبقة لتنفيذ الملقم. والسبب هو لأن العميل يتوقع اختبار لتحديد هوية محددة لتنفيذ هذا الخادم لا يمكن ، ولا ينبغي ، وتوليد ، والحل ليس لاختبار لتحديد هوية محددة ، وإنما لاختبار وجود وشكل محدد ، كما يتضح من الاختبار التالي.

 المصدر : / jaxson / الجذع / الانترنت / الجذر / آلة حاسبة / testcontract.html فار baseURL = "/ الخدمات / calculatorrest / عمليات" ؛ فار entityURL = "" ؛testVerifyRedirection : الدالة () (طلب فار = متزامن الجديدة () ؛ request.complete = وظيفة (statusCode ، statusText ، responseText ، responseXML) (اذا (statusCode! = 201) (تفشل ( "201 المتوقعة تلقت" + statusCode) ؛) entityURL = this._xmlhttp.getResponseHeader ( "الموقع") ؛ إذا كان (entityURL == فارغة | | entityURL.length <= baseURL.length) ( فشل ( "اذهب رابط لا يمكن أن تكون فارغة") ؛ )معلومات ( "testVerifyRedirection" ، "اذهب العنوان هو (" entityURL + + ")")؛testManager.success (" urltest ") ؛) request.get (baseURL) ؛) ،

 

في الاختبار ، فإن الثابت ترميز إشارة رابط يتم تخزينها في baseURL متغير. عنوان الموقع إنشاؤه بشكل حيوي يتم تخزينه في متغير entityURL ، الذي تم تعيينه سلسلة فارغة. وtestVerifyRedirection اختبار له غرض واحد وذلك لاستدعاء الثابت ترميز إشارة عامة. المكالمة المرجع الثابت ترميز عامة بإرجاع إشارة محددة دينامية. لتنفيذ العقد ، يجب اختبار امرين. الأول هو عودة رمز الحالة 201 ، والثاني هو جيل من هذه الصفات. اختبار لرمز الحالة 201 بسيط وينطوي على اتخاذ قرار. اختبار لتحديد هوية ديناميكية هو قليلا أكثر تعقيدا ، ولكن النهج المتبع في اختبار بسيط. اختبار يحتوي على اثنين من التحقق لاختبار وجود المعرف المولدة ديناميكيا. التحقق من اثنين هما أدنى طبقات من الاختبارات لتحديد هوية ديناميكية. يسرد التالية التحقق من ادنى الى اعلى مستوى من التحقق :

اختبار للكشف عن وجود البيانات: نموذجيا ، لاختبار وجود هو لاغية أو notnullاختبار. إذا كانت هذه التجربة ليست فارغة ، وهذا لا يعني أن البيانات صحيحة ، لكنها لا تحقق من وجود البيانات. الاختبار يفترض أن البيانات يحتوي على معرف دينامية.

اختبار للكشف عن وجود المعرف في البيانات: اختبار وجود وسيلة لمعرفة عن طبيعة المعرف دينامية. عادة ، وهذا يعني أن نعرف ما هي البيانات الأصلية ، وكيفية استخدام البيانات المولدة ديناميكيا يجب أن تظهر.

اختبار تنسيق المعرف المولدة ديناميكيا: اختبار التنسيق يعني معرفة شيء عن شكل محدد. قد يعني هذا مع العلم أن هوية رقمية ، لمدة معينة ، أو يجب أن تحتوي على أحرف معينة. على سبيل المثال لا حاسبة لاختبار التنسيق الصحيح من هذه الصفات المولدة ديناميكيا ، ولكن لو حصل ذلك ، فان الاختبار قد تم على أساس طول عدديا ومقرها. كن حذرا عند اختبار للتنسيق ، وتوليد دينامية من البيانات المؤقتة قد التحول من إصدار واحد إلى آخر. عند اختبار البيانات الديناميكية ، تبدأ عند أدنى مستوى وأداء الاختبارات تدريجيا. لا تبدأ على أعلى مستوى الحق من البداية. القيام بذلك يجعل افتراض خطير مفاده وجود البيانات الديناميكية. على سبيل المثال ، إذا كنت فقط لاختبار التنسيق الصحيح ، فلن يكون قادرا على التمييز بين فشل اختبار المفقودين البيانات الديناميكية وتنسيقها بشكل غير صحيح البيانات الديناميكية. يوضح التعليمة البرمجية التالية لتطبيق جافا لإعادة توجيه العنوان :

الفئة العامة RedirectionImplementation يمتد MockUrlTestCaseBase (الفئة العامة RedirectionImplementation يمتد MockUrlTestCaseBase (الجمهور باطلة processRequest (HttpServletRequest الطلب ، استجابة HttpServletResponse) ( this.generateRedirection (ردا على ذلك ، 201 ، request.getRequestURI () + "/ 2364564565") ؛))

رمز جريئة يوضح كيفية إعادة توجيه ينفذ. لاحظ أن المعرف دينامية الثابت ترميز. لا يوجد منطق. إذا كان العميل نفسه ودعا لإعادة توجيه مرات متعددة ، فإنه يتلقى نفس المعرف. ويبدو أن هذا يشكل انتهاكا للعقد ، ومع ذلك فهو لا يشكل انتهاكا. وعقد لآلة حاسبة وتقول لإعادة توجيه إلى الموارد التي يمكن استخدامها لإجراء عملية حسابية. العميل لا يمكن جعل الافتراضات ، ولكن الخادم لا يستطيع ، لأن الخادم هو الذي يتحكم في توليد دينامية معرفات. لتحويل الجدول ، إذا كان العميل لديه المسؤولية لتحديد هوية ديناميكية ، ثم الملقم يجب أن تقبل المعرف دينامية من العميل واستخدامه للأغراض موك رابط. هل يمكن ان يولد دينامية المعرف بشكل حيوي ، ولكن كيف يمكنك اختبار صحة العقد؟ هذا يعود لهذه المشكلة هو موضح في القسم السابق ، الذي قال موك عنوان طبقة لها دور مزدوج يتمثل في تحديد ماهية هذا العقد يحتاج لتبدو وكأنها وإذا كان موك رابط يحتوي على طبقة المنطق أن يتم استخدامها في تنفيذ الخادم ، ثم صحة المشكلة يمكن أن توجد. ولذلك ، إذا يجب أن يكون في معرفات متنوعة ديناميكية ، خلق عدد قليل منها ومن ثم استخدام رقم عشوائي الخوارزمية إلى أن نختار بينهما. عند اختبار العقود دينامية ، تذكر النقاط التالية :

الرقم • من هو المسؤول عن توليد البيانات الديناميكية والذي يستهلك البيانات الديناميكية.

• ومولد للبيانات ديناميكية يمكن أن تحدد حالات الاختبار المحددة ووضع افتراضات حول كيفية يتم تنسيق البيانات.

• والمستهلك من البيانات الديناميكية هي المسؤولة عن تلقي البيانات الديناميكية وتطبيق ثلاثة مستويات من التحقق عند التحقق من صحة البيانات.

• اختبار الحالات لا تدعم دائما البيانات الديناميكية. على سبيل المثال ، قد لا تقدم الدعم للإشارة إلى تنسيق البيانات. في هذه الحالة ، يجب أن يكون مولد للالبيانات الديناميكية إنشاء خطأ ، والمستهلك يجب التحقق من أن يتم إنشاء خطأ. لا تحاول استيعاب مع تحذيرات أو رسائل إعلامية. كنت تتوقع ابدا سباك لمعرفة كيفية إصلاح كسر احد اسنانها.

مقال مقدم من سونيا Lande


تنويه :موقعنا على الانترنت ليست مسؤولة عن محتوى هذه المادة. Webarticles هو حر للمعلومات.
المهم : هذه المادة "اختبار حيوي العقد مع اياكس" وقد ترجم من قبل البرمجيات التلقائي. نشعر بالاسف من اجل أي الأخطاء الإملائية التي قد حدث. شكرا لتفهمكم.

لا تعمل

Online: 355 users browsing the articles directory