JavaRush /جاوا بلاگ /Random-SD /JavaRush لاءِ JUnit يا گهر ۾ ٽيسٽ بابت ٿورو.
Sdu
سطح

JavaRush لاءِ JUnit يا گهر ۾ ٽيسٽ بابت ٿورو.

گروپ ۾ شايع ٿيل
توهان جي ڪم کي جانچڻ لاءِ ڪيترائي ڀيرا ڪنسول ۾ ٽيسٽ ڊيٽا ٽائپ ڪرڻ کان ٿڪجي ويا آهيو؟ ٻلي ۾ ڀليڪار، مان توهان کي ٻڌايان ٿو ته توهان ان سان ڇا ڪري سگهو ٿا. هن مواد جو حتمي مقصد مختلف پيٽرولن سان حل ٿيل ڪم جي لانچ کي خودڪار ڪرڻ ۽ ان جي ماخذ ڪوڊ ۾ تبديليون ڪرڻ کان سواءِ نتيجن کي جانچڻ هوندو. جيئن ته توهان شايد اڳ ۾ ئي عنوان مان سمجهي چڪا آهيو، اسان جو مکيه اسسٽنٽ هن بلڪه سادي معاملي ۾ JUnit هوندو . جيڪڏهن توهان اڃا تائين يونٽ ٽيسٽنگ ۽ يونٽ ٽيسٽ بابت نه ٻڌو آهي، منهنجو مشورو آهي ته توهان ٿورو وقفو وٺو ۽ پاڻ کي انهن تصورن کان واقف ڪريو، خوش قسمتي سان انٽرنيٽ تي ڪافي معلومات آهي. نه، توهان نٿا چاهيو؟ چڱو، ٺيڪ آهي، مان سمجهان ٿو ته اهو سمجهڻ لاءِ وڏو مسئلو نه ٿيندو جيڪو ٿي رهيو آهي. آخرڪار، توهان کي خبر آهي ته عام طور تي ٽيسٽ ۽ ٽيسٽ ڇا آهن؟ توهان اهو هر وقت ڪندا آهيو جڏهن توهان پنهنجو ڪم شروع ڪندا آهيو، شروعاتي ڊيٽا داخل ڪريو ۽ نتيجن جي نتيجن جو مقابلو ڪريو جيڪو توهان ڏسڻ جي توقع ڪئي هئي.
هيلو، دنيا JUnit!
JUnit ڇا آهي؟ منصوبي جي سرڪاري ويب سائيٽ تي اسان هيٺ ڏنل تفصيل پڙهي سگهون ٿا:
JUnit هڪ سادي فريم ورڪ آهي جيڪو ٻيهر قابل ٽيسٽ لکڻ لاءِ. اهو يونٽ ٽيسٽنگ فريم ورڪ لاءِ xUnit فن تعمير جو هڪ مثال آهي.
اسان لاءِ، هن جو مطلب آهي خاص طور تي ٺهيل طبقن کي لکڻ جي صلاحيت جن جا طريقا اسان جي پروگرام سان لهه وچڙ ۾ ايندا، نتيجي جي نتيجن کي ريفرنس هڪ سان ڀيٽ ڪندا ۽ جيڪڏهن اهي نه ملندا ته اسان کي ٻڌايو. اصول کي سمجهڻ لاء، هڪ سادي مثال تي غور ڪريو. فرض ڪريو اسان وٽ ھڪڙو معاون طبقو آھي، جنھن جي طريقن مان ھڪڙو int قسم جا ٻه متغير وٺن ٿا ۽ انھن جي رقم کي واپس ڪري ٿو: JavaRush لاءِ JUnit يا گهر ۾ ٽيسٽ بابت ٿورو.  - 1 ھي آھي اھو ڪارڪردگي آھي جيڪو اسين جانچڻ جي ڪوشش ڪنداسين. خوشقسمتيءَ سان، اسان جي پسنديده IDEA وٽ اڳ ۾ ئي سڀڪجهه موجود آهي جيڪو توهان کي جلدي ٽيسٽ ٺاهڻ جي ضرورت آهي، اسان کي صرف ڪرسر کي ڪلاس جي اعلان واري لائن ۾ رکڻ جي ضرورت آهي، "Alt + Enter" کي دٻايو ۽ "Create Test" کي منتخب ڪريو حوالي سان مينيو ۾: JavaRush لاءِ JUnit يا گهر ۾ ٽيسٽ بابت ٿورو.  - 2 توهان وضاحت ڪرڻ کان پوءِ ڪٿي. توهان کي هڪ ٽيسٽ ٺاهڻ گهرجي، IDEA هڪ ٽيسٽنگ لائبريري چونڊڻ جو مشورو ڏئي ٿو (هن مواد ۾ آئون استعمال ڪريان ٿو JUnit4؛ لائبريري ڪلاسز کي پروجيڪٽ سان ڳنڍڻ لاءِ، توهان کي "فڪس" بٽڻ تي ڪلڪ ڪرڻ جي ضرورت آهي)، طريقن کي جانچڻ جا طريقا ۽ اضافي اختيارن. JavaRush لاءِ JUnit يا گهر ۾ ٽيسٽ بابت ٿورو.  - 3 IDE هڪ ٽيسٽ ڪلاس ٽيمپليٽ ٺاهيندو: ClassName = TestClassName + "Test" MethodName = "test" + TestMethodName JavaRush لاءِ JUnit يا گهر ۾ ٽيسٽ بابت ٿورو.  - 4 اسان کي صرف طريقي جي جسم کي ڀرڻ جي ضرورت آهي. نام نهاد "دعا" ، JUnit پاران مهيا ڪيل طريقا ، انهي سان مدد ڪندي . هڪ آسان طريقي سان، انهن جو ڪم هن طرح ڏسڻ ۾ اچي ٿو: متوقع نتيجو ۽ امتحان جي طريقي سان سڏڻ جو نتيجو .asssert* طريقي سان پاس ڪيو ويو آهي؛ سهولت لاء، توهان هڪ وضاحتي پيغام شامل ڪري سگهو ٿا جيئن پهريون پيٽرولر. جيڪڏهن امتحان دوران پيرا ميٽر نه ملندا، توهان کي ان بابت ٻڌايو ويندو. توهان هڪ ٽيسٽ ڪلاس شروع ڪري سگهو ٿا ايڪسيڪيشن لاءِ صرف هڪ باقاعده ڪلاس وانگر، مان استعمال ڪرڻ کي ترجيح ڏيان ٿو ڪيمي جوڙ Ctrl+Shift+F10 JavaRush لاءِ JUnit يا گهر ۾ ٽيسٽ بابت ٿورو.  - 5
اچو ته ڪم جي وضاحت ڪريو
نظريي ۾، هر شيء سادي ۽ خوبصورت آهي، پر پيش ڪيل مثال جي حوالي سان، اهو واقعي ضروري ناهي؛ اسان ڪمپيوٽر تي ڀروسو ڪري سگهون ٿا ته ٻه نمبر شامل ڪري. اسان ان ۾ وڌيڪ دلچسپي رکون ٿا ته جاوا رش شاگردن پاران حل ڪيل حقيقي مسئلن سان شيون ڪيئن ٿينديون؛ مثال طور، مان صلاح ڏيان ٿو محبوب ليول05.lesson12.bonus03.
/* Algorithms تي مسئلو هڪ پروگرام لکو ته: 1. ڪنسول مان نمبر N > 0 داخل ڪري ٿو 2. پوءِ ڪنسول 3 مان N نمبر داخل ڪري ٿو. داخل ٿيل N نمبرن جي وڌ ۾ وڌ ڏيکاري ٿو. */
اسان کي ٽي ٽيسٽ لکڻ گهرجن، مثبت، منفي انگن ۽ هڪ مخلوط سيٽ لاءِ.
اڳتي هلي ٻيلي ۾...
هي آهي جتي ڪجهه تعجب اسان جي انتظار ۾ آهي: public class UtilApp { public static void main(String[] args) throws Exception { BufferedReader reader = new BufferedReader(new InputStreamReader(System.in)); //напишите здесь ваш code int n; int maximum; /* Конечно же я не буду размещать решение задачи ;) Код приведенный тут переработан для наглядности, и не в коем случае не означает что он должен присутствовать в "правильном решении" */ System.out.println(maximum); } }
  • پروگرام منطق main() طريقي ۾ رکيل آهي
  • ماخذ ڊيٽا طريقي سان نه گذريو آهي، پر ڪيبورڊ مان داخل ڪيو ويو آهي.
  • مکيه () طريقو نتيجو واپس نه ٿو ڏئي، پر ان کي ڪنسول ڏانهن ڪڍي ٿو.
جيڪڏهن پهريون نقطو خاص طور تي مشڪل نه آهي (اسان کي عام طور تي مکيه () طريقي کي سڏي سگهون ٿا)، پوء ايندڙ ٻه اسان کي موضوع ۾ گهيرو ڪرڻ ۽ اسان جي دماغ کي دٻائڻ لاء مجبور ڪن ٿا. مون مسئلي جا ڪيترائي حل ڳوليا:
  1. وڌ ۾ وڌ ڳولڻ لاءِ منطق کي الڳ طريقي سان منتقل ڪرڻ.
    • پرو: ريفيڪٽرنگ جي لحاظ کان صحيح طريقو
    • ڪنس: پروگرام ڪوڊ، غير ضروري ڍانچي، گهٽ ۾ گهٽ هڪ صف يا ArrayList شامل ڪيو ويندو آهي (ذائقو ۽ رنگ تي منحصر ڪري ٿو ...). وڌ ۾ وڌ ڳولڻ لاء صرف ميڪانيزم جي جانچ ڪئي وئي آهي؛ ڊيٽا ان پٽ ۽ آئوٽ جي جانچ نه ڪئي وئي آهي.
  2. System.in/System.out لاءِ ريپر لکڻ.
    • پرو: اسان ٽئين پارٽي لائبريريون استعمال نٿا ڪريون.
    • ڪنس: رستو شروعات ڪندڙن لاءِ نه آهي. ٽيسٽ تي عمل درآمد جي لاڳاپي پيچيدگي؛ ٽيسٽ ۾ ڪوڊ جو مقدار ٿي سگھي ٿو وڌيڪ ٿي سگھي ٿو ڪم جي آزمائش کان.
  3. ٽيسٽ لاءِ اضافي لائبريريون استعمال ڪندي.
    • پرو: ٽيسٽ ۾ صاف ڪوڊ، ٽيسٽ لکڻ جي نسبتا آسان. ٽيسٽ تحت ڪلاس جو سورس ڪوڊ تبديل نه ڪيو ويو آهي.
    • ڪنس: منصوبي سان ٽئين پارٽي جي لائبريرين کي ڳنڍڻ جي ضرورت آهي.
ايماندار ٿيڻ لاء، مون کي ٽيون اختيار تمام گهڻو پسند ڪيو، تنهنڪري اچو ته ان کي لاڳو ڪرڻ جي ڪوشش ڪريو.
سسٽم ضابطا
هڪ مختصر ڳولا مون کي صفحي ڏانهن وٺي وئي http://stefanbirkner.github.io/system-rules/ ، ۽ اهو فوري طور تي واضح ٿي ويو ته اهو ئي هو جيڪو مون کي گهربل هو.
ڪوڊ جي جاچ لاءِ JUnit ضابطن جو مجموعو جيڪو استعمال ڪري ٿو java.lang.System.
سو، اچو ته لائبريري ڊائون لوڊ ڪريون . ڊائون لوڊ ڪريو Commons IO لائبريري ڪم ڪرڻ لاءِ سسٽم ضابطن لاءِ گهربل . اسان ٻنهي لائبريرين کي پنهنجي پروجيڪٽ سان ڳنڍيندا آهيون (فائل -> پروجيڪٽ جي جوڙجڪ -> لائبريريون -> + -> جاوا) ۽ مجسمو ٺاهڻ شروع ڪيو: لانچ ڪرڻ کان پوءِ، اسان جو ڪم توهان کي پڇي ٿو ته ڪنسول مان N+1 نمبر داخل ڪريو، جتي پهريون نمبر توهان کي ٻڌائي ٿو. ڪيترا نمبر هن جي پيروي ڪندا. سسٽم جي ضابطن ۾، TextFromStandardInputStream ڪلاس انهن مقصدن لاءِ استعمال ڪيو ويندو آهي. شروعات ۾، اسان کي پنهنجي ٽيسٽ ڪلاس ۾ هن قسم جي هڪ فيلڊ شامل ڪرڻ جي ضرورت آهي ۽ ان کي @Rule annotation سان نشان لڳايو: @Rule public final TextFromStandardInputStream systemInMock = emptyStandardInputStream(); پوءِ، سڌو سنئون ٽيسٽ جي طريقي ۾ اسان ضروري ڊيٽا کي ظاهر ڪريون ٿا: systemInMock.provideText("4\n2\n6\n1\n3\n"); جئين توهان ڏسي سگهو ٿا، انگ اکر متن جي صورت ۾ منتقل ڪيا ويا آهن ۽ هڪ هائيفن اسٽرنگ "\n" سان الڳ ٿيل آهن. انهي جي بنياد تي، اهو ظاهر ٿئي ٿو ته N 4 جي برابر هوندو، ۽ اسان نمبرن مان وڌ ۾ وڌ ڳولينداسين {2، 6، 1، 3}. اڳيون، اسان کي امتحان جي تحت ڪلاس جو هڪ مثال ٺاهڻ جي ضرورت آهي ۽ main() طريقي کي ڪال ڪريو. اسان جو پروگرام SystemInMock مان ڊيٽا پڙهي ٿو، ان کي پروسيس ڪري ٿو ۽ نتيجو پرنٽ ڪري ٿو، ۽ اسان کي اهو ڪرڻو آهي ته ان کي پڙهو ۽ ان جو معيار سان مقابلو ڪيو وڃي. هن کي ڪرڻ لاء، سسٽم ضابطا اسان کي مهيا ڪري ٿو StandardOutputStreamLog ڪلاس. اسان مخصوص قسم جي هڪ فيلڊ شامل ڪريون ٿا: @Rule public final StandardOutputStreamLog log = new StandardOutputStreamLog(); توهان .getLog() طريقو استعمال ڪندي ڇپيل ڊيٽا پڙهي سگهو ٿا، جڏهن ته توهان کي نون لائن اکرن جي موجودگي کي نظر ۾ رکڻو پوندو، حتمي اختيار هن طرح ٿي سگهن ٿا: assertEquals("{2, 6, 1, 3}, max = 6", "6", log.getLog().trim()); // or assertEquals("{2, 6, 1, 3}, max = 6", "6\r\n", log.getLog()); ٽيسٽ جي وچ ۾، ترتيب ڏيڻ لاء. ڊيٽا ليئرنگ کان پاسو ڪريو، توهان کي لاگ صاف ڪرڻ جي ضرورت آهي log.clear(); منهنجي ٽيسٽ ڪلاس جو مڪمل متن: import org.junit.Rule; import org.junit.Test; import org.junit.contrib.java.lang.system.StandardOutputStreamLog; import org.junit.contrib.java.lang.system.TextFromStandardInputStream; import static org.junit.Assert.*; import static org.junit.contrib.java.lang.system.TextFromStandardInputStream.emptyStandardInputStream; public class UtilAppTest { @Rule public final TextFromStandardInputStream systemInMock = emptyStandardInputStream(); @Rule public final StandardOutputStreamLog log = new StandardOutputStreamLog(); @Test public void testAddition() throws Exception { systemInMock.provideText("4\n2\n6\n1\n3\n"); UtilApp utilApp = new UtilApp(); utilApp.main(new String[]{}); assertEquals("{2, 6, 1, 3}, max = 6", "6", log.getLog().trim()); systemInMock.provideText("5\n-100\n-6\n-15\n-183\n-1\n"); log.clear(); utilApp.main(new String[]{}); assertEquals("{-100, -6, -15, -183, -1}, max = -1", "-1", log.getLog().trim()); systemInMock.provideText("3\n2\n0\n-1\n"); log.clear(); utilApp.main(new String[]{}); assertEquals("{2, 0, -1}, max = 2", "2", log.getLog().trim()); } } اسان لانچ ڪريون ٿا ۽ مزو وٺون ٿا. -=!!! اهم!!!=- هي مواد صرف معلوماتي مقصدن لاءِ مهيا ڪيو ويو آهي؛ مان سرور تي ٽاسڪ جي ڪامياب جاچ جي ضمانت نه ٿو ڏيان جيڪڏهن ٽاسڪ سان گڏ پيڪيج ۾ هڪ غير معمولي ڪلاس آهي. سرور ڏانهن تصديق لاءِ ڪم موڪلڻ کان اڳ، هر شيءِ کي هٽايو غير ضروري: غير ضروري فائلون، غير ضروري ڪلاس، تبصرو ٿيل ڪوڊ. توهان جي ٺاهيل ٽيسٽن جي ڪامياب مڪمل ٿيڻ سرور تي ٽيسٽن جي ڪامياب مڪمل ٿيڻ جي ضمانت نه آهي. مون ڄاڻي واڻي نظرياتي مواد کي چيڀاٽ نه ڪيو: يونٽ ٽيسٽنگ جو نظريو، JUnit تشريح، زور، وغيره، سمورو مواد متن ۾ ڏنل لنڪس ۾ آهي. ٿي سگهي ٿو توهان جا پنهنجا پنهنجا طريقا آهن جاچ جا ڪم، مان انهن تي تبصرن ۾ توهان سان بحث ڪندي خوش ٿيندس.
تبصرا
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION