Wednesday 14 February 2018

سويفت ويتفوريكسكتاتيونسويثتيموت معالج


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

سويفت ويتفوريكسكتاتيونسويثتيموت هاندلر
الحصول على فيا أب ستور قراءة هذه المشاركة في التطبيق لدينا!
ككتستكيس # ويتفالسيكسبكتاتيونونتيلتيموت التنفيذ.
أنا أعمل على مشروع يوس وأنا مسؤول عن اختبار معظم أجزاء منه. وأنا أكتب بعض الاختبارات، وغالبا ما يكون هناك حاجة إلى الانتظار لطريقة غير متزامن لإنهاء، ثم اختبار أن شيئا لم يحدث.
على سبيل المثال، حاول تسجيل الدخول باستخدام اسم مستخدم وكلمة مرور غير صالحين، انتظر حتى يتم الانتهاء من اتصالات الشبكة، ثم اختبر أن المستخدم لم يتمكن من تسجيل الدخول.
سويفت لديه بعض أساليب أنيق لاختبار هذا النوع من الأشياء. تلك التي أستخدمها أكثر هي إكسكتاتيونفوربريديكات و ويتفوريكسكتاتيونسويثتيميوت. هذه الطرق جيدة للاختبار أن شيئا ما حدث بعد انتهاء الطريقة غير المتزامنة. ومع ذلك، لاختبار أن شيئا لم يحدث (وهو ما أريد)، لا يبدو أن هناك أي شيء مصمم خصيصا لهذا الغرض.
لا أستطيع استخدام المسندات لأن ذلك سوف يسبب اختبار مهلة في وقت مبكر لا أستطيع تعديل التعليمات البرمجية التي يتم اختبارها لأنه هو رد فعل دورة حياة التطبيق ونحن اختبار عموما لا تعديل أي رمز، ونحن اختبار فقط.
وهذا هو السبب في أنني صممت هذه الطريقة.
الشيء الرئيسي وظيفة لا لجدولة توقيت وتلبية جميع التوقعات فقط قبل ويتوريكسبكتاتيونسويثتيميوت طريقة خارج. هل هذه هي أفضل طريقة للتعامل مع هذا الوضع؟ ما الذي يمكنني تحسينه بهذه الطريقة (بصرف النظر عن التعليق)؟ أي قضايا التزامن يجب أن تكون قلقة؟
لإضافة بعض السياق، سوف ويتفوريكسكتاتيونسويثتيميوت يؤدي إلى فشل الاختبار إذا لم يتم الوفاء من التوقعات قبل أن تختفي، وهذا هو السبب كان علي أن الوفاء بجميع التوقعات قبل أن يحدث هذا المهلة.
هذا هو الحل مفرط للغاية لمشكلة واضحة نسبيا.
يجب أن يتم استخدام طريقة ويتفوريكسكتاتيونسويثتيموت بشكل فعال فقط للتأكد من أنه تم الوفاء بتوقع غير متزامن معين.
لذلك، في الحالة التي نقوم فيها باختبار ما إذا كان المستخدم قد تم تسجيل الدخول بنجاح، فإنه سيكون مغريا لكتابة شيء على غرار:
ولكن من الناحية الإشكالية، يمكن أن يفشل هذا الاختبار لسببين:
لم يتم تسجيل المستخدم بنجاح. لم يتم الوفاء بالتوقعات في الوقت المحدد.
إذا فشل الاختبار، لا يمكننا أن نكون متأكدين ما إذا كان قد مرت قد أعطى مهلة أطول أو إذا عاد بسرعة كبيرة ولكن لم يكن ناجحا.
لذلك، نحن بحاجة إلى تعديل اختبارنا لتبدو أكثر مثل هذا:
الآن، يحدد الاختبار ما إذا كان يتم تنفيذ الشفرة غير المتزامنة أم لا، وإذا كان الأمر كذلك، فقد تحققنا من نجاح تسجيل الدخول أم لا (أو ما يمثله متغير النجاح هنا).
الآن، كنت تبحث عن حالة المعاكس. كنت تريد أن تعرف ليس ما إذا كان المستخدم تسجيل الدخول، ولكن ما إذا كان تم منع المستخدم من تسجيل الدخول. وهذا بسيط مثل عكس ككتاسرترو إلى شكتاسرتفالس.
الأهم من ذلك، هذا النمط لا يتطلب أي رمز معقدة (أن علينا أن نختبر بالطبع اختبارات حول أنفسنا). اختباراتنا تستخدم الاشياء بحتة للخروج من مربع جناح اختبار كسكودي - بالضبط ما أي واحد يبحث في قاعدة التعليمات البرمجية لدينا نتوقع أن نرى. انها مباشرة جدا إلى الأمام ما يجري هنا.
ونحن قادرون على التمييز بين ما إذا كانت الدعوة غير متزامنة مرة أخرى حدث أو إذا كان يحدث ولكن حصلنا على نتيجة سيئة. هناك فرق كبير هنا بين اختبار فشل لأن رمز غير متزامن لم تعمل قبل وقتنا بها وتشغيله لكنه أعطى نتيجة غير صحيحة. نحن بحاجة إلى التمييز بوضوح بين هذه النتائج، والقيام بذلك لا يتطلب كتابة أي رمز معقدة على الإطلاق.
ملاحظة هامة هنا، تأكد من أن تلبية التوقعات هو آخر شيء تفعله في الاستدعاء غير متزامن، أو يمكنك إعداد شرط السباق.
وأخيرا، يجب أن تكون اختباراتك بالتأكيد أقوى بكثير من ذلك. في نهاية المطاف، يجب أن نختبر مع ردود الشبكة سخرية وعلينا أن نعرف، لكل اختبار، بالضبط ما استجابة الشبكة سوف نحصل عليها. يجب علينا اختبار أن أيا كان رمز يقوم به تسجيل الدخول يعود المعلومات الصحيحة لنا. هناك فرق بين الخادم يسمح للمستخدم بتسجيل الدخول بنجاح وحرمان المستخدم من بيانات اعتماد غير صالحة. هناك أيضا اختلاف بين بيانات الاعتماد غير الصالحة والحصول على أي عدد من أخطاء الخادم المختلفة (الأكثر شيوعا، أخطاء في نطاق 5xx). الحصول على 503 والحصول على رد الاعتماد غير صالحة بعيدة كل البعد عن الشيء نفسه، وينبغي أن الاختبارات الخاصة بك التحقق من صحة أنك تحصل على ما كنت تتوقع الحصول عليها.
لذلك، لقد كنت في الأساس فقط لك أن تخلي تماما كل التعليمات البرمجية التي كتبتها. وسوف أقف إلى جانب ذلك. ليس هناك سبب لوجود الرمز الذي كتبته. ولكن، لا يزال بإمكاننا الحديث عن بعض المشكلات التي تواجهها الشفرة الحالية.
اسم هذه الوظيفة له اسم غريب: ويتفالسيكسبكتاتيونسونتيلتيميوت. من الصعب بالنسبة لي أن أقول بالاسم وحده ماذا نتوقع هذه الطريقة للقيام به. يبدو مماثلا ل ويتفوريكسكتاتيونسويثتيميوت القائمة (مهلة: نستيمينتيرفال، معالج: شكويتكومبليتيوندلر؟) الأسلوب، ولكن لديها هذه المجموعة غريبة من التوقعات أنا من المفترض أن تمر في. اسم يحتاج إلى أن يكون أفضل. شيء مثل أسرتونفولفيلدكتيونسويثتيموت.
حتى مع اسم أفضل، ونحن في مشكلة غير عادية هنا. وبقدر ما أستطيع أن أرى، لا توجد وسائل عامة للتحقق مما إذا كان قد تم الوفاء بتوقعات سابقة أم لا. التعليمات البرمجية الخاصة بك لا تفعل أي شيء حقا وراء الوفاء بجميع التوقعات في اللحظة الأخيرة قبل اكتمال الاختبار. وهي لا تؤكد أنها لم تتحقق في وقت سابق.
هذا المتغير يستحق اسم أفضل، وهذا المنطق إما يستحق التعليق أو ينبغي القضاء عليه تماما. سأختار القضاء عليه تماما ورمي استثناء إذا تجاوز المستخدم قيمة أقل من 0.5. وأخيرا، هذا المنطق هو في نهاية المطاف إشكالية، لأنه يمكن أن ينتهي بك الأمر مع الوقت السلبي (إذا مهلة أقل من 0.5).
ربما يجب أن تختار بعض المنطق الذي يبدو أكثر مثل هذا:
وأخيرا، هناك العديد من المشكلات مع الفئة المتداخلة:
أولا، نحن لسنا بحاجة لوضع علامة على هذا كدالةobjc. يمكننا بدلا من ذلك وضع علامة على أنها ديناميكية.
ثانيا، نحن قوة الصب، لكننا لسنا جيدى. هذا لن يمر مجموعتي الشخصية من قواعد سويفتلينت حيث يعتبر صب القوة خطأ ويرفض تجميع.
ثالثا، إكسبك هو اسم متغير لا معنى لها، وليس هناك قيمة حقيقية في اختصار هنا.
رابعا، كنت قد أخطأت في الوفاء على الرغم من انها مكتوبة بشكل صحيح عدة مرات أخرى في هذا السياق بحكم الإكمال التلقائي أسماء الأسلوب.
خامسا، لماذا لا نضيف فقط طريقة لتمديد للتعامل مع هذا بدلا من أكثر تعقيدا مع فئة متداخلة مع اسم غريب؟
لذلك، هذا هو تنظيفها بشكل كبير ونسخة أكثر أمانا من التعليمات البرمجية الخاصة بك. ولكن مرة أخرى، فإنه لا يؤكد في الواقع أن هذه التوقعات لم تتحقق قبل الوفاء بها (بقدر ما أعرف أنه من المستحيل). وفي نهاية المطاف، انها الكثير جدا من التعليمات البرمجية لتنفيذ واختبار وصيانة، والتحقق من أنه يعمل. وهذا هو الحال بشكل خاص عندما نقارن ذلك إلى ببساطة التوقع + التأكيد التحرير والسرد أشرت في الجزء العلوي من هذه الإجابة.
أردت إضافة إضافة في حالة المشكلة أن هناك كتلة معينة من التعليمات البرمجية التي يتم تنفيذها فقط في حالة تسجيل الدخول بنجاح. إذا كان هذا هو السيناريو، هناك احتمالان فقط.
الأول هو أن هناك نجاح منفصلة وفشل كتل. شيء على هذا النحو:
في هذه الحالة، ذي هو تقريبا نفس ما قمت بإيجاز في الجزء العلوي. نحن لا نريد تحقيق التوقعات في كل من كتل، ولكن في كتلة النجاح، سنقوم فقط إضافة شكتفيل ("كان يسمح للمستخدم بتسجيل الدخول") حتى أننا لا تزال تنتظر حول هذه الكتلة (أو كتلة الفشل) إلى ولكن إذا أخذ هذا المسار، فشلت لسبب محدد أن فرع خاطئ تم إدخال (بدلا من مجرد اتخاذ الطريق الصحيح ولكن لا تأخذ بسرعة كافية).
والحالة الأخرى هي أنه لا يوجد سوى رد على مسار النجاح:
إذا كان هذا هو التصميم، ليس لدي فكرة كيف يدير التطبيق الخاص بك لإعطاء أي ملاحظات للمستخدم على الإطلاق أن شيئا ما حدث خطأ أثناء عملية تسجيل الدخول. وأنا أعلم أنك لا يمكن تعديل التعليمات البرمجية، ولكن تحتاج إلى أن تخبر الناس الذين يمكن أن تحتاج إلى إصلاح هذه المشكلة.

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

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

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

No comments:

Post a Comment