سؤال

لدي تطبيق يرسل رسائل إلى خدمة ويب خارجية.أقوم ببناء ونشر هذا التطبيق باستخدام MSBuild و نظام التحكم في السرعة.NET.عندما يقوم CCNET بإنشاء التطبيق ونشره، فإنه يقوم أيضًا بإجراء مجموعة من الاختبارات باستخدام وحدة.أود الآن اختبار اتصالات خدمة الويب أيضًا.

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

هل يوجد أي المرافق الموجودة هناك التي تسخر بسهولة من خدمة ويب تعتمد على WSDL؟أي واحد فعلت شيئا مماثلا باستخدام MSBuild؟

هناك طرق أخرى لاختبار هذا السيناريو؟

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

المحلول

لقد بدأت للتو في البحث http://www.soapui.org/ ويبدو أنها ستعمل بشكل جيد لاختبار خدمات الويب.

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

نصائح أخرى

بشكل عام، هناك طريقة جيدة جدًا لاختبار مثل هذه الأشياء وهي الاستخدام كائنات وهمية.

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

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

نلقي نظرة على نموك2.إنه منتج ساخر مفتوح المصدر ويسمح لك بإنشاء تطبيقات "افتراضية" للواجهات التي تدعم التفاعل الغني والعميق.

على سبيل المثال، إذا تم استدعاء واجهة WS الخاصة بك IService ولديه Data GetData() يمكنك إنشاء نموذج وهمي يتطلب استدعاء الطريقة مرة واحدة وإرجاع طريقة جديدة Data هدف:

var testService = mockery.NewMock<IService>();
Expect
    .Once
    .On(testService)
    .Method("GetService")
    .WithNoArguments()
    .Will(
        Return.Value(new Data());

في نهاية الاختبار، اتصل mockery.VerifyAllExpectationsHaveBeenMet() للتأكد من أن GetData تم استدعاء الأسلوب في الواقع.

ملاحظة.:لا تخلط بين مشروع "NMock2" ومشروع "NMock RC2"، والذي يُسمى أيضًا "nmock2" على sourceforge.يبدو أن مشروع NMock2 قد حل محل NMock.

قد يكون هذا أيضًا شيئًا - الطائر المحاكي.تبدو مفيدة.

في مكان عملي نستخدمه تايموك و nUnit لاختبار وحدتنا.

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