في SpringMVC ، تقوم حالات الاختبار العامة باختبار طبقة الخدمة. سأوضح اليوم كيفية استخدام MOCK SPRINGMVC لاختبار رمز طبقة وحدة التحكم مباشرة.
1. ما هو اختبار وهمية؟
الاختبار الناهي هو طريقة اختبار يستخدم كائنًا افتراضيًا لإنشائه للاختبار لبعض الكائنات التي ليس من السهل إنشاء أو الحصول عليها أثناء عملية الاختبار.
2. لماذا تستخدم اختبار وهمية؟
يستخدم الاختبار باستخدام كائن وهمية بشكل أساسي لمحاكاة الأدوات التي ليس من السهل إنشاءها في التطبيقات (مثل httpservletrequest يجب بناء في حاويات servlet) أو كائنات معقدة نسبيًا (مثل كائنات ResultSet في JDBC) لجعل الاختبار بسلاسة.
3. التعليقات التوضيحية المشتركة
Runwith (SpringJunit4ClassRunner.class): يعني استخدام مكونات اختبار الربيع لاختبار الوحدة ؛
WebAppConfiguration: سيؤدي استخدام هذا التعليق إلى تمكين خدمة الويب عند تشغيل اختبارات الوحدة ، ثم ابدأ في استدعاء واجهة برمجة تطبيقات REST الخاصة بالوحدة ، ثم إيقاف خدمة الويب بعد اكتمال اختبار الوحدة ؛
التكوين السياق: هناك العديد من الطرق لتحديد معلومات ملف التكوين الخاصة بـ Bean. يستخدم هذا المثال نموذج مسار الملف. إذا كان هناك العديد من ملفات التكوين ، فيمكن تكوين المعلومات الموجودة بين قوسين كصفيف سلسلة لتمثيلها ؛
4. تثبيت بيئة الاختبار
يوفر إطار اختبار Spring MVC طريقتان: تثبيت ودمج اختبار بيئة الويب بشكل مستقل (لا تدمج هذه الطريقة بيئة الويب الحقيقية ، ولكنها تحاكي واختبارات واجهة برمجة تطبيقات Mock المقابلة دون بدء الخادم).
طريقة اختبار التثبيت المستقلة
mockmvcbuilders.standalonesetup (كائن ... وحدات تحكم): حدد مجموعة من وحدات التحكم من خلال المعلمات ، بحيث لا تحتاج إلى الحصول عليها من السياق ؛
هناك خطوتان رئيسيتان:
(1) قم أولاً بإنشاء وحدة التحكم المقابلة بنفسك وحقن التبعيات المقابلة
(2) محاكاة بيئة اختبار MVC من خلال mockmvcbuilders.standalonesetup ، والحصول على mockmvc من خلال الإنشاء
الرمز كما يلي:
package com.xfs.test ؛ استيراد org.junit.assert ؛ استيراد org.junit.before ؛ استيراد org.junit.test ؛ استيراد org.springframework.test.web.servlet.mockmvc org.springframework.test.web.servlet.result.mockmvcresulthandlers ؛ استيراد org.springframework.test.web.servlet.result.mockmvcresultmatchers ؛ استيراد org.springframework.test.web.servlet.setup.mockmvcmvcmvcmvcMvc com.alibaba.fastjson.json ؛ استيراد com.alibaba.fastjson.jsonobject ؛ استيراد com.xfs.web.controller.apicontroller ؛/** * طريقة اختبار التثبيت المستقلة اختبار springmvc mock * * Author Admin * * before public void setup () {apicontroller apicontroller = new apicontroller () ؛ mockmvc = mockmvcbuilders.StandaloneseTup (apicontroller) .build () ؛ } test public void testgetsequence () {try {mvcresult mvcresult = mockmvc.perform (mockmvcrequestbuilders.post ("/api/getsequence"). .andreturn () ؛ int status = mvcresult.getResponse (). getStatus () ؛ System.out.println ("رمز حالة الطلب:" + الحالة) ؛ النتيجة سلسلة = mvcresult.getResponse (). getContAssTring () ؛ System.out.println ("إرجاع الواجهة النتيجة:" + نتيجة) ؛ jsonobject resultObj = json.parseObject (النتيجة) ؛ // تحديد ما إذا كان حقل النجاح في الواجهة يعود إلى JSON هو Assert.AssertTrue (resultobj.getBooleanvalue ("النجاح")) ؛ } catch (استثناء e) {E.PrintStackTrace () ؛ }}}نتيجة الطلب على النحو التالي:
بيئة ويب متكاملة
mockmvcbuilders.webappcontextsetup (سياق webapplicationContext): حدد webapplicationContext ، وسيتم الحصول على وحدة التحكم المقابلة من السياق وسيتم الحصول على mockmvc المقابلة ؛
هناك ثلاث خطوات رئيسية:
(1) WebAppConfiguration: يستخدم في بيئة الاختبار ، مما يعني أن ApplicationContext المستخدم في بيئة الاختبار سيكون من نوع WebApplicationContext ؛ القيمة تحدد جذر تطبيق الويب ؛
(2) من خلال webapplicationContext WAC: ApplicationContext Continer محقن في بيئة الويب
(3) ثم قم بإنشاء mockmvc من خلال mockmvcbuilders.webappcontextsetup (Wac) .build () للاختبار
الرمز كما يلي:
package com.xfs.test;import org.junit.Assert;import org.junit.Before;import org.junit.Test;import org.junit.runner.RunWith;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.mock.web.MockHttpSession;import org.springframework.test.context.contextConfiguration ؛ استيراد org.springframework.test.context.junit4.abstractjunit4springContextTSts org.springframework.test.web.servlet.mockmvc ؛ استيراد org.springframework.test.web.servlet.request.mockmvcrequestbuilders ؛ استيراد org.springframework.test.web.servlet.result.mockmvcresulers ؛ org.springframework.test.web.servlet.result.mockmvcresultMatchers ؛ استيراد org.springframework.test.web.servlet.setup.mockmvcbuilders ؛ import org.springframework.web.web.webapplicalicalication ؛ com.alibaba.fastjson.jsonoBject ؛/** * طريقة بيئة ويب متكاملة springmvc اختبار mock * * Author Admin * * 23 نوفمبر 2017 في 11:12:43 AM */@RUNWITH يمتد AbstractJunit4SpringContextTests {AUTowired public webapplicationContext wac ؛ mockmvc العام mockmvc ؛ جلسة Mockhttpsession العامة ؛ before public void قبل () يلقي استثناء {mockmvc = mockmvcbuilders.webappcontextsetup (wac) .build () ؛ } test public void testgetsequence () {try {mvcresult mvcresult = mockmvc.perform (mockmvcrequestbuilders.post ("/api/getsequence"). .andreturn () ؛ int status = mvcresult.getResponse (). getStatus () ؛ System.out.println ("رمز حالة الطلب:" + الحالة) ؛ النتيجة سلسلة = mvcresult.getResponse (). getContAssTring () ؛ System.out.println ("إرجاع الواجهة النتيجة:" + نتيجة) ؛ jsonobject resultObj = json.parseObject (النتيجة) ؛ // تحديد ما إذا كان حقل النجاح في الواجهة يعود إلى JSON هو Assert.AssertTrue (resultobj.getBooleanvalue ("النجاح")) ؛ } catch (استثناء e) {E.PrintStackTrace () ؛ }}}نتائج التشغيل هي نفس نتائج الاختبار المستقل أعلاه.
تلخيص:
العملية برمتها:
1. MockmvC.Perform ينفذ طلب ؛
2. mockmvcrequestbuilders.get ("/user/1") يقوم بإنشاء طلب
3. النتائج. إضافة تأكيدات بعد التنفيذ
4. النتائج. تضيف معالج نتائج للإشارة إلى ما يجب فعله بالنتيجة. على سبيل المثال ، استخدم mockmvcresulthandlers.print () لإخراج معلومات نتيجة الاستجابة بأكملها.
5. النتائج.
عملية الاختبار بأكملها منتظمة للغاية:
1. الاستعداد لبيئة الاختبار
2. تنفيذ الطلبات من خلال mockmvc
3. إضافة تأكيد التحقق
4. أضف معالج النتائج
5. احصل على mvcresult للتأكيدات المخصصة/تقديم الطلب غير المتزامن التالي
6. قم بإلغاء تثبيت بيئة الاختبار
المرجع: Spring-MVC-Test-Framework
ما سبق هو كل محتوى هذه المقالة. آمل أن يكون ذلك مفيدًا لتعلم الجميع وآمل أن يدعم الجميع wulin.com أكثر.