سؤال

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

ما أريد القيام به هو تسريع فترة الاختبار (لا أريد حقا الانتظار 4 أيام ينظر إلى الأخطاء الروتينية اليومية وتحقق من الأخطاء.) قرأت ويكي كائن وهمية, ، ذكر الكاتب برنامج المنبه. كنت سعيدا جدا أن أرى ولكن لا يزال، لا أعرف كيفية القيام بذلك.

أنا جديد في كائن وهمية، وأنا برمجة في جافا. حتى Jmock أو istmock (أو أي مماثلة) قد بخير بالنسبة لي.

شكرا

هل كانت مفيدة؟

المحلول

كلما احتجت للحصول على الوقت الحالي، لا تستخدم ساعة النظام مباشرة - استخدم واجهة مثل:

public interface Clock
{
    long currentMillis();
}

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

ومع ذلك، ستحتاج أيضا إلى أن يسخر من كل ما يقود النظام الخاص بك - هل أنت تنتظر صراحة وقت معين، أو هل يسميه شيء آخر رمزك؟

نصائح أخرى

يجب أن أعتذر منذ أن طلبت عن جافا وأنا خارج الغداء عندما يتعلق الأمر بجافا، ولكن حل واحد هو أن يسخر من كائن DateTime وقم بتعيينه للوقت المطلوب.

في .NET سوف تبدو مثل هذا:

public static class SystemTime
{
    public static Func<DateTime> Now = () => DateTime.Now;
}

SystemTime.Now = () => new DateTime(2000,1,1);

من: التعامل مع الوقت في الاختبارات


... [A] N منبه البرنامج الذي يسبب جرس للرنين في وقت معين قد يحصل على الوقت الحالي من العالم الخارجي. لاختبار هذا، يجب أن ينتظر الاختبار حتى وقت الإنذار لمعرفة ما إذا كان قد سجل الجرس بشكل صحيح. إذا تم استخدام كائن MOCK بدلا من الكائن الحقيقي، فيمكن برمجته لتوفير وقت رنين الجرس (سواء كان ذلك الوقت في الواقع أم لا) بحيث يمكن اختبار برنامج المنبه في العزلة.

هذا المنبه الذي تشير إليه هو إعطاء مثال يسخر من كائن. إنه ليس فعلا كائن يمكنك استخدامه من إطار وهمية.

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

أولا هو اختبار استدعاء الطريقة ورؤية أن الحدث الذي توقيت يفعل ما تتوقعه. ثم يسخر من هذه الفئة (مع Jmock الطريقة المفضلة هو جعلها واجهة وتطبيق طريقة الاتصال الخاصة بك هذه الواجهة).

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

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

السخرية تتعلق اختبار الوحدة. بالنسبة للوظائف التي تصفها، سأفصل الزناد (في حالتك الحدث المنبه) من العملية (مهما كانت "روتينك اليومي" الذي يقوم به) واختبار الوحدة وظيفة العملية.

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

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top