مضمون جي شروعات: لکڻ JRTB-3 . هاڻي اسان کي امتحان جي باري ۾ سوچڻ جي ضرورت آهي. سڀ شامل ڪيل ڪوڊ ٽيسٽن سان ڍڪيل هجن ته جيئن اسان پڪ ڪري سگهون ته ڪارڪردگي ڪم ڪري ٿي جيئن اسان جي توقع آهي. پهرين اسان SendBotMessageService سروس لاءِ يونٽ ٽيسٽ لکنداسين.
ھڪڙو يونٽ ٽيسٽ ھڪڙو امتحان آھي جيڪو ايپليڪيشن جي ڪجھ ننڍڙي حصي جي منطق کي جانچيندو آھي: عام طور تي اھي طريقا آھن. ۽ سڀئي ڪنيڪشن جيڪي هن طريقي سان آهن جعلي سان تبديل ڪيا ويا آهن ٺٺوليون استعمال ڪندي.
هاڻي توهان سڀ ڪجهه ڏسندا. ساڳئي پيڪيج ۾، صرف ./src/test/java فولڊر ۾ ، اسان هڪ ڪلاس ٺاهيندا آهيون ساڳئي نالي سان ڪلاس جنهن کي اسين آزمائينداسين، ۽ آخر ۾ ٽيسٽ شامل ڪريو . اهو آهي، SendBotMessageService لاءِ اسان وٽ SendBotMessageServiceTest هوندو ، جنهن ۾ هن ڪلاس جا سڀ ٽيسٽ هوندا. ان کي جانچڻ ۾ خيال هن ريت آهي: اسان هڪ ٺٺولي (جعلي) JavaRushTelegarmBot ۾ سلپ ڪريون ٿا، جنهن کان پوءِ اسان پڇون ٿا ته ڇا عمل جو طريقو اهڙي دليل سان سڏيو ويو هو يا نه. هتي ڇا ٿيو آهي:
Mockito استعمال ڪندي، مون هڪ ٺٺولي JavaRushBot اعتراض ٺاهيو، جيڪو مون اسان جي خدمت جي تعمير ڪندڙ ڏانهن منتقل ڪيو. اڳيون، مون هڪ ٽيسٽ لکيو (هر طريقو ٽيسٽ تشريح سان هڪ الڳ ٽيسٽ آهي). هن طريقي جي جوڙجڪ هميشه ساڳي آهي - اهو ڪو به دليل نه وٺندو آهي ۽ باطل موٽائي ٿو. امتحان جو نالو توهان کي ٻڌائڻ گهرجي ته اسان ڇا ڪري رهيا آهيون. اسان جي حالت ۾، هي آهي: صحيح طور تي پيغام موڪلڻ گهرجي - پيغام صحيح طور تي موڪلڻ گهرجي. اسان جو امتحان ٽن حصن ۾ ورهايل آهي:
۽ چيڪ ڪرڻ لاءِ ته UnknownCommand ڊفالٽ هوندو، توهان کي هڪ الڳ ٽيسٽ جي ضرورت آهي - shouldReturnUnknownCommand . مان توهان کي صلاح ڏيان ٿو ته انهن تجربن کي ٻيهر لکڻ ۽ تجزيو ڪيو. ٽيمن لاءِ في الحال نيم رسمي ٽيسٽون ٿينديون، پر انهن کي لکڻ جي ضرورت آهي. منطق ساڳيو هوندو جيئن SendBotMessageService کي جانچڻ لاءِ، تنهن ڪري مان عام ٽيسٽ منطق کي AbstractCommandTest ڪلاس ۾ منتقل ڪندس، ۽ هر مخصوص ٽيسٽ ڪلاس کي ورثي ۾ ملندو ۽ ان جي ضرورتن جي وضاحت ڪندو. جيئن ته سڀئي ٽيسٽون هڪ ئي قسم جا آهن، ان ڪري هر ڀيري هڪ ئي شيءِ لکڻ آسان ناهي، ان سان گڏ هي سٺي ڪوڊ جي نشاني ناهي. هي ڪيئن عام خلاصو طبقو نڪتو:
جئين توهان ڏسي سگهو ٿا، اسان وٽ ٽي تجريدي طريقا آهن، جن جي وضاحت ڪرڻ کان پوء هر حڪم کي هلائڻ گهرجي ٽيسٽ جيڪو هتي لکيو ويو آهي ۽ صحيح طريقي سان عمل ڪريو. اهو هڪ اهڙو آسان طريقو آهي جڏهن بنيادي منطق هڪ تجريدي طبقي ۾ آهي، پر تفصيلات اولاد ۾ بيان ڪيا ويا آهن. ۽ هتي، حقيقت ۾، مخصوص تجربن جا عمل آهن:
HelpCommandTest:
packagecom.github.javarushcommunity.jrtb.command;importorg.junit.jupiter.api.DisplayName;importstaticcom.github.javarushcommunity.jrtb.command.CommandName.HELP;importstaticcom.github.javarushcommunity.jrtb.command.HelpCommand.HELP_MESSAGE;@DisplayName("Unit-level testing for HelpCommand")publicclassHelpCommandTestextendsAbstractCommandTest{@OverrideStringgetCommandName(){return HELP.getCommandName();}@OverrideStringgetCommandMessage(){return HELP_MESSAGE;}@OverrideCommandgetCommand(){returnnewHelpCommand(sendBotMessageService);}}
NoCommandTest:
packagecom.github.javarushcommunity.jrtb.command;importorg.junit.jupiter.api.DisplayName;importstaticcom.github.javarushcommunity.jrtb.command.CommandName.NO;importstaticcom.github.javarushcommunity.jrtb.command.NoCommand.NO_MESSAGE;@DisplayName("Unit-level testing for NoCommand")publicclassNoCommandTestextendsAbstractCommandTest{@OverrideStringgetCommandName(){return NO.getCommandName();}@OverrideStringgetCommandMessage(){return NO_MESSAGE;}@OverrideCommandgetCommand(){returnnewNoCommand(sendBotMessageService);}}
StartCommandTest:
packagecom.github.javarushcommunity.jrtb.command;importorg.junit.jupiter.api.DisplayName;importstaticcom.github.javarushcommunity.jrtb.command.CommandName.START;importstaticcom.github.javarushcommunity.jrtb.command.StartCommand.START_MESSAGE;@DisplayName("Unit-level testing for StartCommand")classStartCommandTestextendsAbstractCommandTest{@OverrideStringgetCommandName(){return START.getCommandName();}@OverrideStringgetCommandMessage(){return START_MESSAGE;}@OverrideCommandgetCommand(){returnnewStartCommand(sendBotMessageService);}}
اسٽاپ ڪمانڊ ٽيسٽ:
packagecom.github.javarushcommunity.jrtb.command;importorg.junit.jupiter.api.DisplayName;importstaticcom.github.javarushcommunity.jrtb.command.CommandName.STOP;importstaticcom.github.javarushcommunity.jrtb.command.StopCommand.STOP_MESSAGE;@DisplayName("Unit-level testing for StopCommand")publicclassStopCommandTestextendsAbstractCommandTest{@OverrideStringgetCommandName(){return STOP.getCommandName();}@OverrideStringgetCommandMessage(){return STOP_MESSAGE;}@OverrideCommandgetCommand(){returnnewStopCommand(sendBotMessageService);}}
اڻڄاتل ڪمانڊ ٽيسٽ:
packagecom.github.javarushcommunity.jrtb.command;importorg.junit.jupiter.api.DisplayName;importstaticcom.github.javarushcommunity.jrtb.command.UnknownCommand.UNKNOWN_MESSAGE;@DisplayName("Unit-level testing for UnknownCommand")publicclassUnknownCommandTestextendsAbstractCommandTest{@OverrideStringgetCommandName(){return"/fdgdfgdfgdbd";}@OverrideStringgetCommandMessage(){return UNKNOWN_MESSAGE;}@OverrideCommandgetCommand(){returnnewUnknownCommand(sendBotMessageService);}}
اهو واضح آهي ته راند موم بتي جي لائق هئي، ۽ AbstractCommandTest جي مهرباني، اسان سادي ۽ سمجھڻ واري ٽيسٽ سان ختم ڪيو جيڪي لکڻ ۾ آسان ۽ سمجهڻ ۾ آسان آهن. ان کان علاوه، اسان غير ضروري ڪوڊ جي نقل کان نجات حاصل ڪئي (هيلو کي DRY -> نه ورجايو پنهنجو اصول). ان کان علاوه، ھاڻي اسان وٽ حقيقي ٽيسٽ آھن جن جي ذريعي اسين ايپليڪيشن جي ڪارڪردگي جو اندازو لڳائي سگھون ٿا. اهو پڻ سٺو لڳندو ته بوٽ لاءِ هڪ ٽيسٽ لکڻ ، پر هر شيءِ ايتري آساني سان ڪم نه ڪندي ۽ عام طور تي ، ٿي سگهي ٿو ته راند موم بتي جي لائق ناهي ، جيئن اهي چون ٿا. تنهن ڪري، هن اسٽيج تي اسان کي اسان جي ڪم مڪمل ڪندو. آخري ۽ پسنديده شيءِ - اسان هڪ ڪمٽ ٺاهيو، پيغام لکي ٿو: JRTB-3: ٽيليگرام بوٽ ڪمانڊز کي سنڀالڻ لاءِ ڪمانڊ جو نمونو شامل ڪيو ويو آهي ۽ هميشه وانگر - گٿب اڳ ۾ ئي ڄاڻي ٿو ۽ پيش ڪري ٿو پل جي درخواست ٺاهڻ لاءِ: تعمير گذري چڪو آهي ۽ توهان اڳ ۾ ئي ڪري سگهو ٿا ملائي... پر نه! مون پروجيڪٽ ورزن کي اپڊيٽ ڪرڻ وسري ويو ۽ ان کي RELEASE_NOTES ۾ لکڻ. اسان نئين ورزن سان هڪ داخلا شامل ڪريون ٿا - 0.2.0-SNAPSHOT: اسان هن ورزن کي pom.xml ۾ اپڊيٽ ڪيو ۽ هڪ نئون ڪمٽ ٺاهيو: نئون ڪمٽ: JRTB-3: اپڊيٽ ٿيل RELEASE_NOTES.md هاڻي دٻايو ۽ تعمير مڪمل ٿيڻ جو انتظار ڪريو. تعمير گذري چڪو آهي، توهان ان کي ضم ڪري سگهو ٿا: مان برانچ کي ختم نه ڪري رهيو آهيان، تنهنڪري توهان هميشه ڏسي سگهو ٿا ۽ موازنہ ڪري سگهو ٿا ڇا تبديلي آئي آهي. اسان جي ٽاسڪ بورڊ کي اپڊيٽ ڪيو ويو آهي:
نتيجا
اڄ اسان هڪ وڏو ڪم ڪيو: اسان ڪم لاءِ ڪمانڊ ٽيمپليٽ متعارف ڪرايو. هر شي قائم ڪئي وئي آهي، ۽ هاڻي هڪ نئين ٽيم شامل ڪرڻ هڪ سادي ۽ سڌو عمل هوندو. اسان اڄ به جاچ بابت ڳالهايو. اسان ٽيمن لاءِ مختلف ٽيسٽن ۾ ڪوڊ نه ورجائڻ سان به ٿورو کيڏيو. هميشه وانگر، مان گيٽ هب تي رجسٽر ڪرڻ جي صلاح ڏيان ٿو ۽ هن سيريز ۽ ٻين منصوبن جي پيروي ڪرڻ لاءِ منهنجي اڪائونٽ کي فالو ڪيو جنهن تي آئون اتي ڪم ڪري رهيو آهيان. مون هڪ ٽيليگرام چينل پڻ ٺاهيو جنهن ۾ مان نئين مضمونن جي رليز کي نقل ڪندس. هڪ دلچسپ ڳالهه اها آهي ته ڪوڊ عام طور تي آرٽيڪل کان هڪ هفتو اڳ جاري ڪيو ويندو آهي، ۽ چينل تي آئون هر وقت اهو لکندو آهيان ته ڪو نئون ڪم مڪمل ڪيو ويو آهي، جيڪو مون کي مضمون پڙهڻ کان اڳ ڪوڊ معلوم ڪرڻ جو موقعو ڏيندو. جلد ئي آئون هن بوٽ کي جاري رکڻ جي بنياد تي شايع ڪندس، ۽ جيڪي ٽيليگرام چينل کي سبسڪرائب ڪندا ان جي باري ۾ سڀ کان پهريان ڄاڻندا؛) پڙهڻ لاء توهان سڀني جي مهرباني، جاري رکڻ لاء.
GO TO FULL VERSION