تقدم هذه المقالة طريقة دمج صندوق الربيع في الخيار (BDD) ويشاركه معك. التفاصيل كما يلي:
1. إنشاء بنية مشروع سبرينج بوت على النحو التالي:
2. أضف تبعيات بوم
<؟ XSI: schemalocation = "http://maven.apache.org/Pom/4.0.0 <soph> 0.0.1-snapshot </version> <cplaging> jar </packaging> <name> spring-boot-cucumber </name> <specord> مشروع تجريبي لـ Spring Boot و Cucumber </descriver <sophy> 1.5.6.release </version> <repiledpath/> <!-بحث الوالد من المستودع-> </inpart> <ferties> <cucumber.version> <project.reporting.outputencoding> utf-8 </project.reporting.outputencoding> <java.version> 1.7 </java.version> </properties> <ependencies> <redenced> <roupend> org.springframework.boot </groupid> <Rependency> <roupEd> info.cukes </rougiD> <StifactId> cucumber-java </shintifactid> <sophy> $ {cucumber.version} </version> </sopherency> <redenced> </sultid> info.cukes </groupiD> <Rependency> <roupend> info.cukes </rougiD> <StifactId> cucumber-spring </stifactid> <الإصدار> $ {cucumber.version} </version> </remberency> <redenced> <sured> info.cukes </groupid> <Sextipions> <Sective> <rougiD> Junit </rougiD> <StifactId> Junit </stifactid> </section> </requortions> </sependency> <rependency> <roupiD> org.springframework.boo </groupiD> </sependencies> <build> <ultipins> <rougiD> org.springframework.boot </rougeid> <StifactId> Spring-boot-maven-plugin </suntifactid> <supturation> <source> 1.7 </source> <target> 1.7 </isplict> </configin> </plugin> <StifactId> exec-maven-plugin </stifactid> <configuration> <source> 1.7 </ource> <target> 1.7 </target> </configuration> <Mainclass> com.chhliu.test.cucumbertest.java </mainclass> <enduments> <Icsument>-البرنامج المساعد </iscument> <Icsument> جميلة </pictument> <Iccument>-glue </iscition> <Icsument> src/test/resourt </build> </project>2. اكتب واجهة الخدمة وفئات التنفيذ
حزمة com.chhliu.service ؛ / ** * تسجيل الدخول المحاكاة * Author Chhliu * */ واجهة عامة userInfoservicei {boolean login (string username ، كلمة مرور ، سلسلة inscreppassword) ؛ } حزمة com.chhliu.service ؛ استيراد org.springframework.stereotype.service ؛ service ("userInfoservice") فئة عامة userInfoservice تنفذ userInfoservicei {تسجيل الدخول المنطقي العام (اسم مستخدم السلسلة ، كلمة مرور السلسلة ، string inflispassword) {return (username.equals ("123456)) }} 3. اكتب ملفات الميزات
#Language: ZH-CN # "ZH-CN": { # "ولكن": "*| ولكن <" ، # "و": "*| و <| و <| و <| في نفس الوقت <" ، # "ثم": " "الخلفية" ، # "سيناريو": "سيناريو_الوتشن": "مخطط سيناريو | مخطط سيناريو" ، # "أمثلة": "أمثلة" ، # "معطى": "*| إذا <| if <| if <| if <| if <| if <| if <" if <"if <" # "bank وظيفة: إذا قمت بسحب الأموال في البنك ، فإنني قمت بتسجيل الدخول بنجاح و إذا كان الرصيد هو 500000 ، السيناريو: يسحب البنك أموالًا إذا: قمت بتسجيل الدخول مع "Chhliu" وكلمة المرور التي تم إدخالها هي "123456" عندما: تأكيد كلمة المرور أيضًا "123456" ، ثم: سيكون رصيد البطاقة المصرفية "500000" 4. اكتب فصول الاختبار
حزمة com.chhliu.test ؛ استيراد org.junit.runner.runwith ؛ استيراد cucumber.api.cucumberoptions ؛ استيراد cucumber.api.junit.cucumber ؛ /*** runwith (cucumber.class) هذا عداء ، يشير إلى استخدام الخيار لتشغيل الاختبارات* cucumberoptions ، والذي يحدد دليل الميزة المراد تشغيل يستخدم لتحديد الدليل الذي يجد ملف تعريف الخطوة عند تشغيل المشروع * * في المشاريع الفعلية ، مع تقدم المشروع ، قد يتكون مشروع الاختبار من ملفات ميزة متعددة ، وقد يتكون كل ملف ميزة أيضًا من سيناريوهات متعددة. بشكل افتراضي ، * كل تشغيل هو تشغيل جميع السيناريوهات في جميع الميزات. قد يتسبب ذلك في تشغيل البرنامج النصي للاختبار مرة واحدة في ظل الظروف العادية ، والتي تستغرق وقتًا طويلاً للغاية لانتظار نتائج الاختبار. * ومع ذلك ، في العملية الفعلية ، تتميز حالات الاختبار بالأولوية. على سبيل المثال ، Smoketest ، اختبار الانحدار ، وما إلى ذلك ، أو في بعض الأحيان توجد حالات الاستخدام الصغيرة بشكل خاص ، مثل المستوى أمر بالغ الأهمية ، * تتطلب حالات الاستخدام هذه التشغيل طويل الأجل لمراقبة ما إذا كان النظام لا يحتوي على صفحات بيضاء أو صفحات 404. في هذا الوقت ، يمكننا استخدام العلامات * في الخيار ، وتضيف العلامة مباشرة أي عدد من العلامات مع المسبق @للميزة أو السيناريو قبل الميزة أو السيناريو أو السيناريو الكلمات الرئيسية ، ويتم فصل العلامات المتعددة عن طريق المساحات * chhliu */ @runwith (cucumber.class) cucumroptions (الإضافات = {json " "Pretty"} ، ميزات = "SRC/Test/Resources") فئة عامة Cucumbertest {} 5. قم بتشغيل فئة الاختبار وتحسين الخطوات غير المحددة لإخراج الاختبار
حزمة com.chhliu.test ؛ استيراد javax.annotation.Resource ؛ استيراد org.junit.assert ؛ استيراد com.chhliu.service.userinfoservicei ؛ استيراد cucumber.api.java.zh_cn.if ؛ استيراد cucumber.api.java.zh_cn. when ؛ استيراد cucumber.api.java.zh_cn.so ؛ فئة عامة تكامل Cucumber Spring {resource (name = "userInfoservice") خدمة userInfOservicei الخاصة ؛ اسم المستخدم الخاص بالسلسلة الخاصة ؛ كلمة مرور السلسلة الخاصة ؛ سلسلة خاصة تأكيد PassPass. ef ("^: لقد قمت بتسجيل الدخول $ باستخدام/" ([^/"]*)/" $ ") void public I log in (string arg1) رمي رمي {this.username = arg1 ؛} @EF ("^: كلمة المرور التي تم إدخالها هي/" } when ("^: كلمة المرور هي أيضًا/" ([^/"]*)/" $ ") public void تأكيد كلمة المرور هي أيضًا _ (سلسلة arg1) رمي رمي {this. service.login (اسم المستخدم ، كلمة المرور ، ConfigPassword) ؛ if (islogin) {system.out.println ("تسجيل الدخول بنجاح! توازن الاستعلام هو كما يلي:"+arg1) ؛ Assert.assertequals ("500000" ، arg1) ؛ }}} 6. أضف دعم التعليقات التوضيحية لخطوات الاختبار
Runwith (springJunit4ClassRunner.Class) contextConfiguration // إذا لم تتم إضافة هذا التعليق ، فلن يتم حقن الفول ولا يمكن حقن
7. نتائج الاختبار
2 سيناريوهات (مرران)
11 خطوة (تم تمرير 11)
0M0.091S
8. نقاط التكامل
عند دمج الحذاء الربيعي مع الخيار ، هناك نقطة يجب الانتباه إليها ، لأن Boot Boot يدعو إلى إلغاء التخلص من xmlization ، لذلك بالطريقة التقليدية ، سوف يقرأ الخيار ملف تكوين Cucumber.xml ضمن ClassPath لتهيئة الفاصوليا. بعد الاندماج مع الربيع ، لا يمكن استخدام هذه الطريقة. تحتاج إلى استخدام تعليق توضيحي ContextConfiguration لتنفيذ تحميل الفصل. إذا احتاج ملف التكوين إلى تحميله ، فيمكنك استخدامه على النحو التالي:
contextConfiguration (مواقع = {"classPath: ApplicationContext.xml"})إذا كنت تستخدم التعليقات التوضيحية لدمجها ، فاستخدم ما يلي:
@contextConfiguration (الفئات = SpringBootCucmumberApplication.class)
أو مباشرة
contextConfiguration
ملاحظة خاصة: يجب إضافة شرح التوضيح ContextConfiguration ، وإلا فإن حقن الفول سيفشل.
بعد ذلك ، دعونا نلقي نظرة على سبب سبب هذا الموقف من رمز المصدر.
الكود المتورط في هذا الجزء موجود في فئة SpringFactory ضمن حزمة تربيع الخيار. لنلقي نظرة على الفصل التالي:
public void start () {// cucumber test method method if (StepClassWithSpringContext! = null) {// إذا تم استخدام شرح @contextConfiguration ، فهذا ليس null testContextManager = New CucumberTestContManager (StepClassWithSpringContxt) ؛ } آخر {// وإلا فإن StepClassWithSpringContext سيكون فارغًا ، وسيدخل الفرع التالي إذا (Beanfactory == null) {beanfactory = createFallbackContext () ؛ // هذه الطريقة هي التركيز الذي نريد أن نتبعه}}}} if (beanfactory == null || isNewContextCreated ()) {beanfactory = testContextManager.getBeanFactory () ؛ لـ (class <؟> StepClass: StepClasses) {registerStePclassBeanDefinition (BeanFactory ، StepClass) ؛ }} gluecodecontext.instance.start () ؛ } دعونا نتبع طريقة createFallbackContext:
configurableListableBeanfactory createFallBackContext () {configurableApplicationContext ApplicationContext ؛ if (getClass (). getClassloader (). getResource ("Cucumber.xml")! = null) {// the <span style = "font-family: arial ، helvetica ، sans-serif ؛"> configurableApplicationContext </span> ApplicationContex } آخر {// إذا لم يتم تكوين cucumber.xml ، فسيقوم الجديد بالجميع complicationContext = جديد genericapplicationContext () ؛ } ApplicationContext.registerShutDownHook () ؛ configurableListableBeanfactory Beanfactory = applicationContext.getBeanFactory () ؛ beanfactory.registerscope (gluecodescope.name ، new GlueCodescope ()) ؛ لـ (class <؟> StepClass: StepClasses) {registerStePclassBeanDefinition (BeanFactory ، StepClass) ؛ } إرجاع Beanfactory ؛ }أخيرًا ، دعنا نتحدث عن فئة GenericApplicationContext. يعتمد هذا الفصل على نوع الفول ثم مثيل Newinstance. ومع ذلك ، نظرًا لأن فئات أخرى يتم حقنها في هذه الفئة ، لا يمكن تهيئة الفئة المحقونة من خلال المثيل الجديد ، لذلك سيفشل الحقن وسيتم الإبلاغ عن مؤشر فارغ.
ما سبق هو كل محتوى هذه المقالة. آمل أن يكون ذلك مفيدًا لتعلم الجميع وآمل أن يدعم الجميع wulin.com أكثر.