CodeGym /جاوا بلاگ /Random-SD /سڀ يونٽ جي جاچ بابت: ٽيڪنالاجي، تصور، مشق
John Squirrels
سطح
San Francisco

سڀ يونٽ جي جاچ بابت: ٽيڪنالاجي، تصور، مشق

گروپ ۾ شايع ٿيل
اڄ توهان کي ڪا اهڙي ايپليڪيشن نه ملندي جيڪا ٽيسٽن سان نه ٺهي وئي هجي، تنهن ڪري هي موضوع نوان ڊولپرز لاءِ هميشه کان وڌيڪ لاڳاپيل هوندو: توهان بغير ٽيسٽن جي ڪامياب نٿا ٿي سگهو. اچو ته غور ڪريون ته ڪھڙي قسم جي جاچ اصولن ۾ استعمال ٿينديون آھن، ۽ پوءِ اسين تفصيل سان پڙھنداسين ھر شيءِ جو اتي آھي يونٽ ٽيسٽنگ بابت ڄاڻڻ لاءِ. سڀ يونٽ جي جاچ بابت: ٽيڪنالاجي، تصور، مشق - 1

ٽيسٽ جا قسم

هڪ امتحان ڇا آهي؟ وڪيپيڊيا جي مطابق: "سافٽ ويئر ٽيسٽنگ ۾ شامل آهي سافٽ ويئر جزو يا سسٽم جزو جي عمل کي هڪ يا وڌيڪ دلچسپي جي ملڪيت جو جائزو وٺڻ لاء." ٻين لفظن ۾، اهو ڪجهه حالتن ۾ اسان جي سسٽم جي صحيحيت جي جانچ آهي. چڱو، اچو ته ڏسون ته عام طور تي ڪهڙي قسم جا امتحان آهن:
  • يونٽ ٽيسٽ - ٽيسٽ جن جو مقصد سسٽم جي هر ماڊل کي الڳ الڳ چيڪ ڪرڻ آهي. اهي تجربا سسٽم جي ننڍن ائٽمي حصن تي لاڳو ٿيڻ گهرجن، مثال طور ماڊلز.
  • سسٽم جي جاچ - اعلي سطحي جاچ جانچڻ لاءِ ايپليڪيشن جي وڏي حصي جي آپريشن يا مجموعي طور تي سسٽم.
  • ريگريشن ٽيسٽ - ٽيسٽنگ جيڪا جانچڻ لاءِ استعمال ٿئي ٿي ته ڇا نيون خاصيتون يا بگ فيڪس ايپليڪيشن جي موجوده ڪارڪردگي تي اثرانداز ٿين ٿا يا پراڻا بگ متعارف ڪرائين ٿا.
  • فنڪشنل ٽيسٽ - چيڪ ڪرڻ ته ڇا ايپليڪيشن جو حصو وضاحتن، صارف ڪهاڻيون، وغيره ۾ بيان ڪيل گهرجن کي پورو ڪري ٿو.

    فنڪشنل ٽيسٽ جا قسم:

    • وائيٽ باڪس ٽيسٽنگ - چيڪ ڪرڻ ته ڇا ايپليڪيشن جو حصو ضرورتن کي پورو ڪري ٿو جڏهن ته سسٽم جي اندروني عمل کي ڄاڻڻ دوران؛
    • بليڪ باڪس جاچ - چيڪ ڪرڻ ته ڇا ايپليڪيشن جو حصو ضرورتن کي پورو ڪري ٿو بغير سسٽم جي اندروني عمل کي ڄاڻڻ کان سواء.

  • ڪارڪردگي جاچ - ٽيسٽ جيڪي لکيل آهن اهو طئي ڪرڻ لاءِ ته سسٽم يا سسٽم جو حصو هڪ خاص لوڊ هيٺ ڪيئن ڪم ڪري ٿو.
  • لوڊ ٽيسٽ - معياري لوڊ جي تحت سسٽم جي استحڪام کي جانچڻ ۽ وڌ ۾ وڌ لوڊ ڳولڻ لاء تيار ڪيل ٽيسٽ، جنهن تي ايپليڪيشن اڃا تائين صحيح ڪم ڪري ٿي.
  • اسٽريس ٽيسٽ - ٽيسٽنگ ٺهيل آهي ايپليڪيشن جي ڪارڪردگي کي جانچڻ لاءِ غير معياري لوڊ تحت ۽ سسٽم جي ناڪامي کان اڳ وڌ ۾ وڌ لوڊ کي طئي ڪرڻ لاءِ.
  • سيڪيورٽي جاچ - ٽيسٽ سسٽم جي سيڪيورٽي کي جانچڻ لاء استعمال ڪيو ويو آهي (هيڪرز، وائرس، رازداري ڊيٽا تائين غير مجاز رسائي، ۽ ٻين خوشگوار حملن کان).
  • لوڪلائيزيشن ٽيسٽ - ايپليڪيشن جي لوڪلائيزيشن جا ٽيسٽ.
  • استعمال جي جاچ - جاچ جو مقصد استعمال جي قابليت، سمجھڻ، ڪشش، ۽ سکڻ جي صلاحيت کي جانچڻ آهي.
اهو سڀ ڪجهه سٺو لڳندو آهي، پر اهو عمل ۾ ڪيئن ڪم ڪندو آهي؟ سادو! اسان استعمال ڪريون ٿا مائڪ ڪوهن جي ٽيسٽنگ پرامڊ: سڀ يونٽ جي جاچ بابت: ٽيڪنڪ، تصور، مشق - 2هي پرامڊ جو هڪ آسان نسخو آهي: اهو هاڻي اڃا به ننڍن حصن ۾ ورهايل آهي. پر اڄ اسان کي ايترو نفيس نه ٿيندو. اسان آسان ترين نسخي تي غور ڪنداسين.
  1. يونٽ - هي سيڪشن يونٽ ٽيسٽ ڏانهن اشارو ڪري ٿو، جيڪي ايپليڪيشن جي مختلف تہن ۾ لاڳو ٿين ٿيون. اهي ايپليڪيشن منطق جي ننڍڙي تقسيم يونٽ کي آزمائيندا آهن. مثال طور، ڪلاس، پر اڪثر طريقا. اهي تجربا عام طور تي ممڪن حد تائين ڪوشش ڪندا آهن ته ڪنهن به خارجي منطق کان آزمائي ڪيل شين کي الڳ ڪرڻ لاءِ. اهو آهي، اهي اهو وهم پيدا ڪرڻ جي ڪوشش ڪندا آهن ته باقي ايپليڪيشن هلي رهي آهي جيئن توقع ڪئي وڃي.

    ھميشه انھن ٽيسٽن مان گھڻا ھئڻ گھرجي (ڪنھن به ٻئي قسم کان وڌيڪ)، ڇاڪاڻ ته اھي ننڍا ٽڪرا ٽيسٽ ڪن ٿا ۽ تمام گھٽ وزن وارا آھن، نه گھڻا وسيلا استعمال ڪن ٿا (يعني رام ۽ وقت).

  2. انضمام - هي حصو انضمام جي جاچ ڏانهن اشارو ڪري ٿو. هي جاچ جانچ ڪري ٿو سسٽم جا وڏا ٽڪرا. اهو آهي، اهو يا ته منطق جي ڪيترن ئي ٽڪرن کي گڏ ڪري ٿو (ڪيترائي طريقن يا طبقن)، يا اهو هڪ خارجي جزو سان رابطي جي صحيحيت کي جانچيندو آهي. اهي تجربا عام طور تي يونٽ ٽيسٽ کان ننڍا هوندا آهن ڇاڪاڻ ته اهي ڳري آهن.

    هڪ انضمام ٽيسٽ جو هڪ مثال ڊيٽابيس سان ڳنڍڻ ۽ ان سان ڪم ڪرڻ جي طريقن جي آپريشن جي درستگي کي جانچڻ ٿي سگهي ٿو.

  3. UI - هي سيڪشن انهن تجربن ڏانهن اشارو ڪري ٿو جيڪي صارف انٽرفيس جي آپريشن کي چيڪ ڪن ٿا. انهن ۾ ايپليڪيشن جي سڀني سطحن تي منطق شامل آهي، ڇو ته انهن کي آخر کان آخر تائين ٽيسٽ پڻ سڏيو ويندو آهي. ضابطي جي طور تي، انهن مان تمام گهٽ آهن، ڇاڪاڻ ته اهي سڀ کان وڌيڪ پيچيده آهن ۽ تمام ضروري (استعمال ٿيل) رستن کي چيڪ ڪرڻ گهرجي.

    مٿي ڏنل تصوير ۾، اسان ڏسون ٿا ته ٽڪنڊي جا مختلف حصا سائيز ۾ مختلف آهن: تقريبن ساڳيو تناسب حقيقي ڪم ۾ مختلف قسم جي تجربن جي تعداد ۾ موجود آهي.

    اڄ اسين سڀ کان وڌيڪ عام ٽيسٽ، يونٽ ٽيسٽ تي ويجھو نظر وجهنداسين، ڇو ته جاوا جي سڀني خود اعتمادي ڊولپرز کي انهن کي بنيادي سطح تي استعمال ڪرڻ جي قابل هوندو.

يونٽ ٽيسٽ ۾ اهم تصور

ٽيسٽ ڪوريج (ڪوڊ ڪوريج) هڪ بنيادي قدمن مان هڪ آهي ته ڪيئن چڱيءَ طرح ايپليڪيشن کي جانچيو وڃي ٿو. هي ڪوڊ جو سيڪڙو آهي جيڪو ڍڪيل آهي ٽيسٽ (0-100٪). عملي طور تي، ڪيترائي هن سيڪڙو کي پنهنجي مقصد جي طور تي تعاقب ڪري رهيا آهن. اھو ڪجھھ آھي جنھن سان مان متفق آھيان، ڇاڪاڻ⁠تہ ان جو مطلب آھي ٽيسٽ لاڳو ٿيڻ شروع ٿي جتي انھن جي ضرورت ناھي. مثال طور، فرض ڪريو اسان وٽ معياري CRUD (ٺاهيو/حاصل/اپڊيٽ/خارج) آپريشن اسان جي خدمت ۾ اضافي منطق کان سواءِ. اهي طريقا خالص وچولي آهن جيڪي مخزن سان ڪم ڪندڙ پرت ڏانهن ڪم جي نمائندگي ڪن ٿا. هن صورتحال ۾، اسان وٽ امتحان لاء ڪجھ به نه آهي، سواء شايد شايد اهو ڏنل طريقو DAO طريقو سڏيندو آهي، پر اهو هڪ مذاق آهي. اضافي اوزار عام طور تي ٽيسٽ ڪوريج جو اندازو لڳائڻ لاءِ استعمال ڪيا ويندا آهن: JaCoCo، Cobertura، Clover، Emma، وغيره. هن موضوع جي وڌيڪ تفصيلي مطالعي لاءِ، هتي ڪجهه لاڳاپيل مضمون آهن: TDD جو مطلب آهي ٽيسٽ-هلندڙ ترقي. هن طريقي ۾، ٻيو ڪجهه ڪرڻ کان پهريان، توهان هڪ امتحان لکندا آهيو جيڪو مخصوص ڪوڊ چيڪ ڪندو. اهو نڪتو بليڪ باڪس جاچ: اسان ڄاڻون ٿا ته ان پٽ آهي ۽ اسان ڄاڻون ٿا ته ان پٽ ڇا هجڻ گهرجي. اهو ممڪن بڻائي ٿو ته ڪوڊ جي نقل کان بچڻ لاء. توهان جي ايپليڪيشن ۾ ڪارڪردگي جي هر بٽ لاءِ ٽيسٽ ڊيزائيننگ ۽ ڊولپمينٽ ٽيسٽ سان شروع ٿئي ٿي. TDD جي طريقي ۾، اسان پهريون ڀيرو هڪ امتحان ٺاهي ٿو جيڪو ڪوڊ جي رويي کي بيان ڪري ٿو ۽ جانچ ڪري ٿو. TDD جو بنيادي مقصد توهان جي ڪوڊ کي وڌيڪ سمجھڻ وارو، آسان، ۽ غلطي کان پاڪ بڻائڻ آهي. سڀ يونٽ جي جاچ بابت: ٽيڪنالاجي، تصور، مشق - 3طريقيڪار ھيٺين تي مشتمل آھي:
  • اسان جو امتحان لکون ٿا.
  • اسان امتحان هلائيندا آهيون. حيرت انگيز طور تي، اهو ناڪام ٿيو، ڇو ته اسان اڃا تائين گهربل منطق تي عمل نه ڪيو آهي.
  • ڪوڊ شامل ڪريو جيڪو امتحان پاس ڪرڻ جو سبب بنائي ٿو (اسين ٻيهر ٽيسٽ هلائيندا آهيون).
  • اسان ڪوڊ ريفيڪٽر ڪريون ٿا.
TDD يونٽ ٽيسٽ تي ٻڌل آهي، ڇاڪاڻ ته اهي ٽيسٽ آٽوميشن پيرامڊ ۾ سڀ کان ننڍا بلڊنگ بلاڪ آهن. يونٽ ٽيسٽ سان، اسان ڪنهن به طبقي جي ڪاروباري منطق کي جانچي سگھون ٿا. بي ڊي ڊي جو مطلب آهي رويي تي مبني ترقي. اهو طريقو TDD تي ٻڌل آهي. وڌيڪ خاص طور تي، اهو استعمال ڪري ٿو سادي ٻولي مثال جيڪي ترقي ۾ شامل هر ڪنهن لاء سسٽم رويي جي وضاحت ڪن ٿا. اسان هن اصطلاح تي غور نه ڪنداسين، ڇو ته اهو خاص طور تي امتحان ڏيندڙ ۽ ڪاروباري تجزيه نگارن کي متاثر ڪري ٿو. ٽيسٽ ڪيس ھڪڙو منظرنامو آھي جيڪو بيان ڪري ٿو قدم، مخصوص حالتون، ۽ پيرا ميٽرز کي جانچڻ لاءِ گھربل ٽيسٽ ھيٺ. هڪ ٽيسٽ فيڪٽر ڪوڊ آهي جيڪو ٽيسٽ ماحول کي سيٽ ڪري ٿو رياست کي لازمي طور تي ٽيسٽ هيٺ طريقي سان هلائڻ لاءِ. اهو شيون جو اڳواٽ مقرر ڪيل سيٽ آهي ۽ انهن جي رويي کي مخصوص حالتن هيٺ.

ٽيسٽ جا مرحلا

هڪ امتحان ٽن مرحلن تي مشتمل آهي:
  • ٽيسٽ ڊيٽا بيان ڪريو (فڪسچر).
  • ٽيسٽ تحت ڪوڊ استعمال ڪريو (آزمائشي طريقي کي ڪال ڪريو).
  • نتيجن جي تصديق ڪريو ۽ متوقع نتيجن سان مقابلو ڪريو.
سڀ يونٽ جي جاچ بابت: ٽيڪنڪ، تصور، مشق - 4ٽيسٽ ماڊلرٽي کي يقيني بڻائڻ لاء، توهان کي ايپليڪيشن جي ٻين تہن کان الڳ ڪرڻ جي ضرورت آهي. اهو اسٽب، ٺٺوليون ۽ جاسوس استعمال ڪندي ڪري سگهجي ٿو. ٺٺوليون شيون آھن جيڪي ترتيب ڏئي سگھجن ٿيون (مثال طور، ھر ٽيسٽ لاءِ تيار ڪيل). اهي اسان کي بيان ڪن ٿا ته اسان طريقي جي ڪالن مان ڇا توقع ڪندا آهيون، يعني متوقع جواب. اسان ٺٺوليون شيون استعمال ڪندا آهيون تصديق ڪرڻ لاءِ ته اسان حاصل ڪريون ٿا جيڪو اسان جي توقع آهي. اسٽبس ٽيسٽ دوران ڪالن لاءِ سخت ڪوڊ ٿيل جواب مهيا ڪن ٿا. اهي پڻ ڪال جي باري ۾ معلومات ذخيرو ڪري سگھن ٿا (مثال طور، پيٽرولر يا ڪالن جو تعداد). انهن کي ڪڏهن ڪڏهن جاسوس طور حوالو ڏنو ويو آهي. ڪڏهن ڪڏهن ماڻهو ٺٺولي ۽ ٺٺولي جي اصطلاحن کي غلط سمجهندا آهن: فرق اهو آهي ته اسٽب ڪنهن به شيءِ جي جانچ نٿو ڪري - اهو صرف هڪ ڏنل رياست کي نقل ڪري ٿو. ٺٺولي هڪ اعتراض آهي جنهن ۾ اميدون آهن. مثال طور، ته هڪ ڏنل طريقو کي سڏيو وڃي ٿو وقت جي هڪ خاص تعداد. ٻين لفظن ۾، توهان جو امتحان ڪڏهن به ٽٽڻ جي ڪري نه ڀڃندو، پر اهو ٿي سگهي ٿو ٺٺولي جي ڪري.

ٽيسٽ ماحول

تنهن ڪري، هاڻي نقطي ڏانهن. جاوا لاءِ ڪيترائي ٽيسٽ ماحول (فريم ورڪ) موجود آهن. انهن مان سڀ کان وڌيڪ مشهور آهن JUnit ۽ TestNG. اسان جي نظرثاني لاءِ هتي، اسان استعمال ڪندا آهيون: سڀ يونٽ جي جاچ بابت: ٽيڪنالاجي، تصور، مشق - 5هڪ JUnit ٽيسٽ هڪ ڪلاس ۾ هڪ طريقو آهي جيڪو صرف جانچ لاءِ استعمال ڪيو ويندو آهي. ڪلاس کي عام طور تي ساڳيو نالو ڏنو ويندو آهي جيئن ڪلاس اهو ٽيسٽ ڪندو آهي، آخر ۾ "ٽيسٽ" شامل ڪيو ويندو آهي. مثال طور، CarService -> CarServiceTest. Maven تعميراتي نظام خودڪار طريقي سان امتحان جي دائري ۾ اهڙن طبقن کي شامل ڪري ٿو. حقيقت ۾، هن طبقي کي ٽيسٽ ڪلاس سڏيو ويندو آهي. اچو ته مختصر طور تي بنيادي تشريح تي وڃو:

  • @ ٽيسٽ ظاھر ڪري ٿو ته طريقو ھڪڙو امتحان آھي (بنيادي طور تي، ھڪڙو طريقو ھن تشريح سان نشان لڳل آھي ھڪڙو يونٽ ٽيسٽ).
  • @Before ھڪڙو طريقو اشارو ڪري ٿو جيڪو ھر ٽيسٽ کان اڳ عمل ڪيو ويندو. مثال طور، ٽيسٽ ڊيٽا سان ڪلاس کي آباد ڪرڻ، ان پٽ ڊيٽا پڙهڻ، وغيره.
  • @After ھڪڙي طريقي کي نشان ھڻڻ لاء استعمال ڪيو ويندو آھي جنھن کي ھر ٽيسٽ کان پوء سڏيو ويندو (مثال طور ڊيٽا کي صاف ڪرڻ يا ڊفالٽ قدر بحال ڪرڻ).
  • @BeforeClass ھڪڙي طريقي جي مٿان رکيل آھي، @Before جي مطابق. پر اهڙي طريقي کي صرف هڪ ڀيرو سڏيو ويندو آهي سڀني ٽيسٽن کان اڳ ڏنل طبقي لاءِ ۽ ان ڪري جامد هجڻ گهرجي. اهو استعمال ڪيو ويندو آهي وڌيڪ وسيلا-گراهڪ آپريشن انجام ڏيڻ، جهڙوڪ ٽيسٽ ڊيٽابيس کي گھمائڻ.
  • @AfterClass @BeforeClass جي سامهون آهي: اهو هڪ ڀيرو ڏنل طبقي لاءِ عمل ڪيو ويندو آهي، پر صرف سڀني ٽيسٽن کان پوءِ. اهو استعمال ڪيو ويندو آهي، مثال طور، مسلسل وسيلن کي صاف ڪرڻ يا ڊيٽابيس کان ڌار ڪرڻ لاء.
  • @ نظر انداز ڪري ٿو ته هڪ طريقو غير فعال آهي ۽ مجموعي ٽيسٽ رن دوران نظرانداز ڪيو ويندو. اهو مختلف حالتن ۾ استعمال ڪيو ويندو آهي، مثال طور، جيڪڏهن بنيادي طريقو تبديل ڪيو ويو آهي ۽ ٽيسٽ اڃا تائين تبديل نه ڪيو ويو آهي تبديلين کي گڏ ڪرڻ لاء. اهڙين حالتن ۾، اهو پڻ ضروري آهي ته وضاحت شامل ڪريو، يعني @Ignore("Some description").
  • @Test(expected = Exception.class) منفي ٽيسٽن لاءِ استعمال ٿيندو آهي. اهي تجربا آهن جيڪي تصديق ڪن ٿا ته طريقو ڪنهن غلطي جي صورت ۾ ڪيئن عمل ڪندو آهي، اهو آهي، ٽيسٽ طريقي جي توقع رکي ٿو ته ڪنهن قسم جي استثنا کي اڇلائي. اهڙو طريقو @Test تشريح پاران اشارو ڪيو ويو آهي، پر هڪ اشاري سان ڪهڙي غلطي کي پڪڙڻ لاء.
  • @ ٽيسٽ (ٽائم آئوٽ = 100) چيڪ ڪري ٿو ته اهو طريقو 100 ملي سيڪنڊن کان وڌيڪ نه تي عمل ڪيو ويو آهي.
  • @Mock هڪ فيلڊ جي مٿان استعمال ڪيو ويندو آهي هڪ ٺٺولي اعتراض کي تفويض ڪرڻ لاء (هي JUnit تشريح ناهي، پر ان جي بدران Mockito مان اچي ٿو). جيئن ضرورت هجي، اسان هڪ مخصوص صورتحال لاءِ ٺٺولي جي رويي کي سڌو سنئون ٽيسٽ طريقي ۾ مقرر ڪيو.
  • @RunWith(MockitoJUnitRunner.class) هڪ طبقي جي مٿان رکيل آهي. هي تشريح JUnit کي ڪلاس ۾ ٽيسٽ کي دعوت ڏيڻ لاءِ ٻڌائي ٿي. هتي مختلف رانديگر آهن، جن ۾ شامل آهن: MockitoJUnitRunner، JUnitPlatform، ۽ SpringRunner. JUnit 5 ۾، @RunWith تشريح کي وڌيڪ طاقتور @ExtendWith تشريح سان تبديل ڪيو ويو آهي.
اچو ته نتيجن جي مقابلي لاءِ استعمال ٿيندڙ ڪجھ طريقن تي نظر وجهون:

  • assertEquals (Object expects, Object actuals) - چيڪ ڪري ٿو ته آيا پاس ٿيل شيون برابر آهن.
  • assertTrue (بولين پرچم) - چيڪ ڪري ٿو ته ڇا منظور ٿيل قدر صحيح آهي.
  • assertFalse(بولين پرچم) - چيڪ ڪري ٿو ته ڇا منظور ٿيل قدر غلط آهي.
  • assertNull(Object object) - چيڪ ڪري ٿو ته ڇا پاس ٿيل اعتراض null آهي.
  • assertSame(Object firstObject، Object secondObject) - چيڪ ڪري ٿو ته آيا پاس ٿيل قدر ساڳيا اعتراض ڏانهن اشارو ڪن ٿا.
  • assertThat (T t، matcher ملائيندڙ) - چيڪ ڪري ٿو ته ڇا t ميچر ۾ بيان ڪيل شرط کي پورو ڪري ٿو.
AssertJ هڪ مفيد مقابلي جو طريقو پڻ مهيا ڪري ٿو: assertThat(firstObject).isEqualTo(secondObject) . هتي مون بنيادي طريقن جو ذڪر ڪيو آهي - ٻيا مٿيان مختلف قسم جا آهن.

عملي طور تي جاچ

هاڻي اچو ته مٿين مواد کي هڪ خاص مثال ۾ ڏسو. اسان جانچ ڪنداسين خدمت جي تازه ڪاري جو طريقو. اسان DAO پرت تي غور نه ڪنداسين، ڇو ته اسان ڊفالٽ استعمال ڪري رهيا آهيون. اچو ته ٽيسٽ لاءِ هڪ اسٽارٽر شامل ڪريون:
<dependency>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-starter-test</artifactId>
   <version>2.2.2.RELEASE</version>
   <scope>test</scope>
</dependency>
۽ هتي اسان وٽ خدمت ڪلاس آهي:
@Service
@RequiredArgsConstructor
public class RobotServiceImpl implements RobotService {
   private final RobotDAO robotDAO;

   @Override
   public Robot update(Long id, Robot robot) {
       Robot found = robotDAO.findById(id);
       return robotDAO.update(Robot.builder()
               .id(id)
               .name(robot.getName() != null ? robot.getName() : found.getName())
               .cpu(robot.getCpu() != null ? robot.getCpu() : found.getCpu())
               .producer(robot.getProducer() != null ? robot.getProducer() : found.getProducer())
               .build());
   }
}
لائن 8 - ڊيٽابيس مان اپڊيٽ ٿيل اعتراض کي ڇڪيو. لائنون 9-14 - بلڊر ذريعي هڪ اعتراض ٺاهيو. جيڪڏهن ايندڙ شئي وٽ فيلڊ آهي، ان کي سيٽ ڪريو. جيڪڏهن نه، اسان ڇڏينداسين جيڪو ڊيٽابيس ۾ آهي. هاڻي اسان جي امتحان کي ڏسو:
@RunWith(MockitoJUnitRunner.class)
public class RobotServiceImplTest {
   @Mock
   private RobotDAO robotDAO;

   private RobotServiceImpl robotService;

   private static Robot testRobot;

   @BeforeClass
   public static void prepareTestData() {
       testRobot = Robot
               .builder()
               .id(123L)
               .name("testRobotMolly")
               .cpu("Intel Core i7-9700K")
               .producer("China")
               .build();
   }

   @Before
   public void init() {
       robotService = new RobotServiceImpl(robotDAO);
   }
لائن 1 - اسان جو رنر. لائن 4 - اسان خدمت کي DAO پرت کان الڳ ڪريون ٿا ٺٺولي کي متبادل ڪندي. لڪير 11 — اسان ڪلاس لاءِ هڪ ٽيسٽ ادارو (جيڪو اسان گني پگ طور استعمال ڪنداسين) مقرر ڪيو. لڪير 22 - اسان سروس اعتراض سيٽ ڪيو، جيڪو اسان کي جانچ ڪنداسين.
@Test
public void updateTest() {
   when(robotDAO.findById(any(Long.class))).thenReturn(testRobot);
   when(robotDAO.update(any(Robot.class))).then(returnsFirstArg());
   Robot robotForUpdate = Robot
           .builder()
           .name("Vally")
           .cpu("AMD Ryzen 7 2700X")
           .build();

   Robot resultRobot = robotService.update(123L, robotForUpdate);

   assertNotNull(resultRobot);
   assertSame(resultRobot.getId(),testRobot.getId());
   assertThat(resultRobot.getName()).isEqualTo(robotForUpdate.getName());
   assertTrue(resultRobot.getCpu().equals(robotForUpdate.getCpu()));
   assertEquals(resultRobot.getProducer(),testRobot.getProducer());
}
هتي اسان ڏسون ٿا ته ٽيسٽ ۾ ٽي واضح ڊويزنون آهن: لائينون 3-9 - وضاحت ڪندڙ فيڪٽرز. لڪير 11 - ٽيسٽ تحت ڪوڊ تي عمل ڪرڻ. لائنون 13-17 - نتيجن جي جانچ ڪندي. وڌيڪ تفصيل ۾: لائنون 3-4 - DAO ٺٺولي لاء رويي مقرر ڪريو. لڪير 5 - مثال قائم ڪريو ته اسين تازه ڪاري ڪنداسين اسان جي معيار جي مٿان. لڪير 11 - طريقو استعمال ڪريو ۽ نتيجو مثال وٺو. لڪير 13 - چيڪ ڪريو ته اهو null نه آهي. لڪير 14 - نتيجن جي ID ۽ ڏنل طريقي جي دليلن جو مقابلو ڪريو. لائن 15 - چيڪ ڪريو ته ڇا نالو اپڊيٽ ڪيو ويو. لائن 16 - سي پي يو جو نتيجو ڏسو. لائن 17 - اسان مثال ۾ ھن فيلڊ کي بيان نه ڪيو آھي، تنھنڪري اھو ساڳيو رھڻ گھرجي. اسان هتي اها حالت چيڪ ڪريون ٿا. اچو ته ان کي هلائي: سڀ يونٽ جي جاچ بابت: ٽيڪنڪ، تصور، مشق - 6امتحان سائي آهي! اسان رليف جو ساهه کڻي سگهون ٿا :) خلاصو، ٽيسٽ ڪوڊ جي معيار کي بهتر بڻائي ٿو ۽ ترقي جي عمل کي وڌيڪ لچڪدار ۽ قابل اعتماد بڻائي ٿو. تصور ڪريو ته سافٽ ويئر کي ٻيهر ڊزائين ڪرڻ لاءِ ڪيتري ڪوشش وٺندي آهي جنهن ۾ سوين ڪلاس فائلون شامل آهن. جڏهن اسان وٽ انهن سڀني طبقن لاءِ يونٽ ٽيسٽ لکيل آهن، اسان اعتماد سان ريفيڪٽر ڪري سگهون ٿا. ۽ سڀ کان وڌيڪ اهم، اهو اسان کي مدد ڪري ٿو آساني سان ڳولڻ دوران ڪيچ. دوستو ۽ ڇوڪريون، اڄ مون وٽ اهو ئي آهي. مون کي هڪ پسند ڏيو، ۽ هڪ تبصرو ڇڏي ڏيو :)
تبصرا
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION