কেন পরীক্ষার জন্য JUnit ব্যবহার করবেন?


131

হতে পারে আমার প্রশ্নটি নবাগত একটি, তবে আমি কী পরিস্থিতিতে আমি যে পরিস্থিতিতে ব্যবহার করব তা সত্য বুঝতে পারি না ?

আমি সহজ অ্যাপ্লিকেশন লিখি বা বড়গুলি আমি System.outবিবৃতি দিয়ে সেগুলি পরীক্ষা করি এবং এটি আমার পক্ষে বেশ সহজ করে তোলে।

JUnit, প্রকল্পে অপ্রয়োজনীয় ফোল্ডারগুলির সাথে কেন পরীক্ষা-ক্লাস তৈরি করতে হবে যদি আমাদের এখনও একই পদ্ধতিগুলি কল করতে হয় তবে তারা কী ফিরে আসে তা পরীক্ষা করে দেখুন এবং তারপরে আমাদের কাছে সমস্ত কিছু বর্নিত করার ওভারহেড রয়েছে?

কেন কোনও ক্লাস লিখছেন না এবং একবারে এটি পরীক্ষা করে System.outপরীক্ষার-ক্লাস তৈরি করবেন না কেন?

পুনশ্চ. আমি শুধু বড় বড় প্রকল্পগুলিতে কখনও কাজ করি নি।

তাহলে উদ্দেশ্য কী?



7
আপনি সচেতন যে প্রতিবার আপনি আপনার প্রোগ্রামের যে কোনও কিছু পরিবর্তন করলে, আপনার আউটপুট ম্যানুয়ালি পরীক্ষা করার সমস্ত পূর্ববর্তী কাজ বাতিল হয়ে যায় এবং আপনাকে সেগুলি শুরু থেকেই আবার করতে হবে?
থরবজর্ন রাভন অ্যান্ডারসন

শুধু "টেস্টিং" নয়, "চালাক পরীক্ষা "ও অত্যন্ত গুরুত্বপূর্ণ। এটির একটি দুর্দান্ত উদাহরণ এখানে দেওয়া হয়েছে: wp.me/prMeE-11
akcasoy

উত্তর:


138

এটি পরীক্ষা করছে না, এটি "আউটপুটটিতে ম্যানুয়ালি খুঁজছেন" (এলএমএও হিসাবে বিজে পরিচিত)। আরও আনুষ্ঠানিকভাবে এটি "অস্বাভাবিক আউটপুটটির জন্য ম্যানুয়ালি খুঁজছেন" (এলএমএফও) হিসাবে পরিচিত। (নীচের নোট দেখুন)

আপনি যে কোনও সময় কোড পরিবর্তন করবেন, আপনাকে অবশ্যই সেই পরিবর্তনগুলি দ্বারা প্রভাবিত সমস্ত কোডের জন্য অ্যাপ্লিকেশন এবং এলএমএফএও চালাতে হবে। এমনকি ছোট প্রকল্পগুলিতেও এটি সমস্যাযুক্ত এবং ত্রুটি-প্রবণ।

এখন আপনি কোনও কোড পরিবর্তন করার সময় 50 কে, 250 কে, 1 মি এলওসি বা আরও বেশি স্কেল করুন এবং এলএমএফএও করুন। এটি কেবল অপ্রীতিকরই নয়, এটি অসম্ভব: আপনি ইনপুট, আউটপুট, পতাকা, শর্তগুলির সংমিশ্রণগুলি ছোট করে দিয়েছেন এবং সমস্ত সম্ভাব্য শাখাগুলি ব্যবহার করা কঠিন।

সবচেয়ে খারাপ, এলএমএফএওর অর্থ ওয়েব অ্যাপের পৃষ্ঠাগুলিতে পৃষ্ঠাগুলি পরিদর্শন করা, প্রতিবেদন চালানো, কয়েক ডজন ফাইল এবং মেশিন জুড়ে কয়েক মিলিয়ন লগ লাইন পোর্ট করা, উত্পন্ন এবং বিতরণ করা ইমেলগুলি পড়া, পাঠ্য বার্তাগুলি পরীক্ষা করা, একটি রোবটের পথ পরীক্ষা করা, বোতল ভরা হওয়া সোডা, একশত ওয়েব পরিষেবাদি থেকে ডেটা একত্রিত করা, আর্থিক লেনদেনের নিরীক্ষণের ট্রেইল পরীক্ষা করা ... আপনার ধারণাটি পাওয়া যায়। "আউটপুট" এর অর্থ পাঠ্যের কয়েকটি লাইন নয়, "আউটপুট" মানে সামগ্রিক সিস্টেমের আচরণ।

শেষ অবধি, ইউনিট এবং আচরণ পরীক্ষা সিস্টেমের আচরণকে সংজ্ঞায়িত করে। অবিচ্ছিন্ন ইন্টিগ্রেশন সার্ভার দ্বারা পরীক্ষাগুলি চালানো যেতে পারে এবং সঠিকতার জন্য পরীক্ষা করা যেতে পারে। অবশ্যই, System.outতবে এটি করা যায়, তবে সিআই সার্ভার জানতে পারে না যে তাদের মধ্যে কোনওটি ভুল কিনা – এবং যদি এটি হয় তবে সেগুলি ইউনিট পরীক্ষায় রয়েছে এবং আপনি সম্ভবত একটি কাঠামোও ব্যবহার করতে পারেন।

আমরা যতটা ভাল মনে করি তা বিবেচনা করা যায় না, মানুষ ভাল ইউনিট টেস্ট ফ্রেমওয়ার্ক বা সিআই সার্ভার নয়।


নোট: LMAO এর হয় পরীক্ষা, কিন্তু একটি মধ্যে খুব সীমিত অর্থে। এটি কোনও পুরো প্রকল্প জুড়ে বা কোনও প্রক্রিয়ার অংশ হিসাবে কোনও অর্থবহ উপায়ে পুনরাবৃত্তিযোগ্য নয়। এটি একটি আরএপিএল হিসাবে ক্রমবর্ধমান বিকাশের অনুরূপ, কিন্তু কখনও কখনও এই বর্ধিত পরীক্ষাগুলি আনুষ্ঠানিককরণ।


3
প্রথম বাক্যটির জন্য -১, যা সম্পূর্ণ এবং সম্পূর্ণ অসত্য।
মাইকেল বর্গওয়ার্ট

50

আমরা কোনও প্রোগ্রামের আচরণের সঠিকতা যাচাই করতে পরীক্ষা লিখি।

আপনার চোখ ব্যবহার করে আউটপুট স্টেটমেন্টের সামগ্রীটি পরীক্ষা করে কোনও প্রোগ্রামের আচরণের নির্ভুলতা যাচাই করা হ'ল ম্যানুয়াল বা আরও বিশেষত দর্শনীয় প্রক্রিয়া।

আপনি যে তর্ক করতে পারে

ভিজ্যুয়াল ইন্সপেকশন কাজ করে , আমি যাচাই করি যে কোডগুলি এই পরিস্থিতিতেগুলির জন্য যা বোঝাতে চেয়েছিল তা করে এবং একবার যদি আমি দেখতে পাই এটি সঠিক হয় তবে আমরা ভাল।

এখন প্রথমত, কোডটি সঠিকভাবে কাজ করে কি না সে বিষয়ে আপনি আগ্রহী তা আপনার পক্ষে দুর্দান্ত। সেটা একটা ভাল জিনিস. আপনি বক্ররেখার চেয়ে এগিয়ে! দুঃখের বিষয়, একটি পদ্ধতির হিসাবে এটিতে সমস্যা রয়েছে।

ভিজ্যুয়াল ইন্সপেকশনের প্রথম সমস্যাটি হ'ল আপনি কখনই আপনার কোডের সঠিকতা যাচাই করতে সক্ষম না হয়ে একটি খারাপ ldালাই দুর্ঘটনা।

দ্বিতীয় সমস্যাটি হ'ল ব্যবহৃত জোড়া চোখ দু'টির মালিকের মস্তিষ্কের সাথে শক্তভাবে মিলিত হয়। কোডের লেখক যদি ভিজ্যুয়াল ইন্সপেকশন প্রক্রিয়ায় ব্যবহৃত চোখেরও মালিক হন, তবে নির্ভুলতা যাচাইয়ের প্রক্রিয়াটি ভিজ্যুয়াল ইন্সপেক্টরের মস্তিষ্কের অভ্যন্তরীণ প্রোগ্রাম সম্পর্কে জ্ঞানের উপর নির্ভরশীলতা রাখে।

নতুন জোড়া চোখের পক্ষে আসা এবং কোডের যথার্থতা যাচাই করা সহজ কারণ তারা মূল কোডারের মস্তিষ্কের সাথে অংশীদারি না করে। প্রশ্নের দ্বিতীয় কোডটি সম্পূর্ণরূপে বুঝতে দ্বিতীয় চোখের মালিককে কোডটির মূল লেখকের সাথে কথা বলতে হবে । জ্ঞান ভাগ করে নেওয়ার মাধ্যম হিসাবে কথোপকথন কুখ্যাতভাবে বিশ্বাসযোগ্য নয়। অরিজিনাল কোডারটি নতুন জুটির চোখের কাছে অনুপলব্ধ থাকে তবে এমন এক বিন্দুটি মোড। এই দৃষ্টিতে নতুন জোড়া চোখের মূল কোডটি পড়তে হবে।

ইউনিট পরীক্ষাগুলি দ্বারা আবৃত নয় এমন অন্যান্য ব্যক্তির কোড পড়া পড়া ইউনিট পরীক্ষার সাথে সম্পর্কিত কোড পড়ার চেয়ে আরও বেশি কঠিন is অন্যান্য লোকের কোডটি সর্বোত্তমভাবে পড়া মুশকিল কাজ, সবচেয়ে খারাপ সময়ে এটি সফ্টওয়্যার ইঞ্জিনিয়ারিংয়ের সবচেয়ে জটিল কাজ। এর একটি কারণ রয়েছে যে নিয়োগকর্তারা, যখন চাকরির শূন্যপদগুলির বিজ্ঞাপন দেওয়ার সময় চাপ দেয় যে কোনও প্রকল্প গ্রিনফিল্ড (বা একেবারে নতুন)। স্ক্র্যাচ থেকে কোড লিখন বিদ্যমান কোড সংশোধন করার চেয়ে সহজ এবং এর ফলে বিজ্ঞাপনযুক্ত কাজটি সম্ভাব্য কর্মীদের কাছে আরও আকর্ষণীয় দেখাবে।

ইউনিট পরীক্ষার মাধ্যমে আমরা কোডটিকে তার উপাদানগুলির মধ্যে ভাগ করে দেই। প্রতিটি উপাদানগুলির জন্য আমরা প্রোগ্রামটি কীভাবে আচরণ করা উচিত তা উল্লেখ করে আমাদের স্টল সেট আপ করেছিলাম । প্রতিটি ইউনিট পরীক্ষা প্রোগ্রামের অংশটি একটি নির্দিষ্ট দৃশ্যে কীভাবে কাজ করবে সে সম্পর্কে একটি গল্প বলে। প্রতিটি ইউনিট পরীক্ষাটি চুক্তির একটি ধারাটির মতো যা ক্লায়েন্ট কোডের দৃষ্টিকোণ থেকে কী ঘটবে তা বর্ণনা করে।

তারপরে এর অর্থ হ'ল একটি নতুন জুটির চোখের প্রশ্নের মধ্যে কোডে দুটি স্ট্রাইভ লাইভ এবং সঠিক ডকুমেন্টেশন রয়েছে।

প্রথমে তাদের কোড রয়েছে, বাস্তবায়ন হচ্ছে, কোডটি কীভাবে করা হয়েছিল ; দ্বিতীয়টি তাদের কাছে সমস্ত জ্ঞান রয়েছে যা মূল কোডার আনুষ্ঠানিক বিবৃতিগুলির একটি সেটে বর্ণিত হয় যা এই কোডটি কীভাবে আচরণ করা উচিত তার গল্পটি বলে।

ইউনিট পরীক্ষাগুলি ক্লাসটি প্রয়োগ করার সময় মূল লেখকের কাছে থাকা জ্ঞানকে ক্যাপচার এবং আনুষ্ঠানিকভাবে বর্ণনা করে। ক্লায়েন্ট যখন ব্যবহার করে তখন সেই শ্রেণিটি কী আচরণ করে তার একটি বিবরণ তারা সরবরাহ করে।

আপনি এটি করার উপযোগিতা সম্পর্কে প্রশ্ন করা ঠিক করেছেন কারণ একক পরীক্ষাগুলি লিখতে পারবেন যা অকেজো, সমস্ত কোড প্রশ্নবিদ্ধভাবে আবরণ করবেন না, বাসি বা পুরানো হয়ে গেছে ইত্যাদি। আমরা কীভাবে নিশ্চিত করব যে ইউনিট পরীক্ষাগুলি কেবল নকল করে না তবে জ্ঞানসম্মত, বিবেকবান লেখক দৃষ্টিশক্তিভাবে রানটাইমের সময় তাদের কোডের আউটপুট বিবৃতি পরিদর্শন করে প্রক্রিয়াটির উপরে উন্নতি করে? প্রথমে ইউনিট পরীক্ষা লিখুন তারপরে সেই পরীক্ষার পাস করার জন্য কোডটি লিখুন। আপনি যখন সমাপ্ত হন, কম্পিউটারগুলি পরীক্ষা চালাতে দিন, তারা দ্রুততার সাথে পুনরাবৃত্তিমূলক কাজগুলি করার ক্ষেত্রে দুর্দান্ত যা তারা আদর্শভাবে কাজের উপযুক্ত।

প্রতিবার যখন তারা তাদের পরীক্ষার কোডটি ছুঁয়ে যায় এবং প্রতিটি বিল্ডের জন্য পরীক্ষা চালায় তখন পরীক্ষার মান নিশ্চিত করুন। যদি কোনও পরীক্ষা ব্যর্থ হয়, অবিলম্বে এটি ঠিক করুন।

আমরা পরীক্ষা চালানোর প্রক্রিয়াটি স্বয়ংক্রিয় করি যাতে প্রতিবার আমরা যখন কোনও প্রকল্প তৈরি করি তখন সেগুলি চালিত হয়। আমরা কোড কভারেজের জেনারেশনটিকে স্বয়ংক্রিয়ভাবে প্রতিবেদন করি যা পরীক্ষাগুলি দ্বারা আচ্ছাদিত এবং অনুশীলিত কোডের শতাংশের বিবরণ রয়েছে। আমরা উচ্চ শতাংশের জন্য প্রচেষ্টা করি। কিছু সংস্থাগুলি কোডে আচরণের যে কোনও পরিবর্তনগুলি বর্ণনা করার জন্য পর্যাপ্ত ইউনিট পরীক্ষাগুলি না লিখলে সোর্স কোড নিয়ন্ত্রণে কোড পরিবর্তন করতে বাধা দেবে। সাধারণত চোখের দ্বিতীয় জোড়া পরিবর্তনগুলির লেখকের সাথে একযোগে কোড পরিবর্তনগুলি পর্যালোচনা করবে। পর্যালোচক পরিবর্তনগুলি অতিক্রম করবে তা নিশ্চিত করে যে পরিবর্তনগুলি বোধগম্য এবং পর্যাপ্তরূপে পরীক্ষাগুলি দ্বারা আচ্ছাদিত। সুতরাং পর্যালোচনা প্রক্রিয়াটি ম্যানুয়াল, কিন্তু যখন পরীক্ষাগুলি (ইউনিট এবং ইন্টিগ্রেশন পরীক্ষা এবং সম্ভবত ব্যবহারকারী গ্রহণযোগ্যতা পরীক্ষা) এই ম্যানুয়াল পর্যালোচনা প্রক্রিয়াটি পাস করে তবে স্বয়ংক্রিয় বিল্ড প্রক্রিয়াটির অংশ হয়ে যায়। এগুলি প্রতিবার পরিবর্তনটি চেক ইন করা হলে চালানো হয় A সার্ভার বিল্ড প্রক্রিয়ার অংশ হিসাবে এই কাজটি বহন করে।

টেস্টগুলি যা স্বয়ংক্রিয়ভাবে চালিত হয়, কোডের আচরণের অখণ্ডতা বজায় রাখে এবং কোড ভাঙ্গা থেকে কোড বেসে ভবিষ্যতে পরিবর্তনগুলি রোধ করতে সহায়তা করে ।

পরিশেষে, পরীক্ষাগুলি সরবরাহ করা আপনাকে আক্রমণাত্মকভাবে পুনরায় ফ্যাক্টর কোডের অনুমতি দেয় কারণ আপনার কোডগুলি যে পরিবর্তনগুলি বিদ্যমান পরীক্ষাগুলি ভঙ্গ করে না এই জ্ঞানে আপনি বড় কোডগুলি উন্নত করতে পারেন make

টেস্ট ড্রাইভড ডেভলপমেন্টের জন্য একটি সতর্কতা রয়েছে এবং এটি হ'ল এটিকে পরীক্ষাযোগ্য করে তোলার জন্য আপনার চোখের সাথে কোড লিখতে হবে। এর মধ্যে ইন্টারফেসগুলিতে কোডিং এবং সহযোগিতা অবজেক্টগুলি তাত্ক্ষণিকভাবে নির্ভরশীল ইনজেকশন জাতীয় কৌশল ব্যবহার করা। কেন্ট বেকের কাজটি দেখুন যা টিডিডি খুব ভাল করে বর্ণনা করে। ইন্টারফেস এবং অধ্যয়নের কোডিং সন্ধান করুন


13

আপনি যখন System.out এর মতো কোনও কিছু ব্যবহার করে পরীক্ষা করেন, আপনি কেবল ব্যবহারের সম্ভাব্য ব্যবহারের ক্ষেত্রে একটি ছোট উপসেট পরীক্ষা করছেন। আপনি যখন এমন সিস্টেমগুলির সাথে কাজ করছেন তখন এটি খুব পুঙ্খানুপুঙ্খ নয়।

ইউনিট পরীক্ষাগুলি আপনাকে বিভিন্ন ডেটা ইনপুটগুলির একটি খুব বড় এবং বিচিত্র সেট ব্যবহার করে আপনার অ্যাপ্লিকেশনটিতে দ্রুত পরীক্ষা চালানোর অনুমতি দেওয়ার জন্য ডিজাইন করা হয়েছে। অতিরিক্ত হিসাবে, সেরা ইউনিট পরীক্ষাগুলিও সীমানা ক্ষেত্রে দায়বদ্ধ করে যেমন বৈধ হিসাবে বিবেচিত তার প্রান্তে থাকা ডেটা ইনপুটগুলি।

এই সমস্ত ভিন্ন ইনপুটগুলির পরীক্ষা করতে কোনও মানুষের জন্য কয়েক সপ্তাহ সময় লাগতে পারে যদিও কোনও মেশিনের জন্য কয়েক মিনিট সময় লাগতে পারে।

এটি এরকমভাবে ভাবুন: আপনি স্থিতিশীল এমন কোনও কিছুর "পরীক্ষা "ও করছেন না। আপনার অ্যাপ্লিকেশনটি সম্ভবত ধ্রুবক পরিবর্তনের মধ্য দিয়ে চলেছে। সুতরাং, এই ইউনিট পরীক্ষাগুলি কম্পাইল বা স্থাপনার চক্রের বিভিন্ন পয়েন্টে চালানোর জন্য ডিজাইন করা হয়েছে। সম্ভবত সবচেয়ে বড় সুবিধা হ'ল:

আপনি যদি আপনার কোডটিতে কোনও কিছু ভাঙ্গেন, আপনি এখনই এটি সম্পর্কে জানতে পারবেন , আপনি মোতায়েনের পরে নয়, যখন কোনও QA পরীক্ষক কোনও বাগটি ধরেন, যখন আপনার ক্লায়েন্টরা বাতিল না হয়ে থাকে not আপনার তাত্ক্ষণিকভাবে সমস্যাটি ঠিক করার আরও ভাল সম্ভাবনা থাকবে , কারণ এটি স্পষ্ট যে প্রশ্নটি কোডের অংশটি ভেঙেছে যা সম্ভবত আপনার শেষ সংকলনের পরে ঘটেছে। সুতরাং, সমস্যা সমাধানের জন্য প্রয়োজনীয় তদন্তমূলক কাজের পরিমাণ অনেক হ্রাস পেয়েছে।


9

আমি কিছু অন্যান্য System.out যোগ করতে পারি না:

  • প্রতিটি পরীক্ষার কেসকে স্বাধীন করুন (এটি গুরুত্বপূর্ণ)

    JUnit এটি করতে পারে: প্রতিবার নতুন পরীক্ষার কেস ইনস্ট্যান্স তৈরি করা হবে এবং @Beforeডাকা হবে।

  • উত্স থেকে পরীক্ষার কোড পৃথক করুন

    JUnit এটা করতে পারেন।

  • সিআইয়ের সাথে সংহতকরণ

    জুনিট এন্ট এবং ম্যাভেনের সাথে এটি করতে পারে।

  • পরীক্ষার কেসগুলি সহজেই সাজানো এবং একত্রিত করুন

    JUnit @Ignoreস্যুট করতে এবং পরীক্ষা করতে পারে ।

  • ফলাফল চেক করা সহজ

    JUnit অনেকগুলি আসার পদ্ধতি সরবরাহ করে ( assertEquals, assertSame...)

  • মোক এবং স্টাব আপনাকে পরীক্ষার মডিউলটিতে ফোকাস দেয়।

    জুনিত এটি করতে পারে: মোক এবং স্টাব ব্যবহার করে আপনাকে সঠিক স্থিতিশীলতা সেটআপ করে তোলে এবং পরীক্ষার মডিউলটির যুক্তিতে মনোনিবেশ করে।


9

ইউনিট পরীক্ষাগুলি নিশ্চিত করে যে কোডটি উদ্দেশ্য হিসাবে কাজ করে। কোনও ত্রুটি সমাধানের জন্য নতুন কার্যকারিতা তৈরি করতে আপনাকে যদি পরে এটি পরিবর্তন করতে হয় তবে কোডটি এখনও ইচ্ছাকৃতভাবে কাজ করে তা নিশ্চিত করতে তারা খুব সহায়ক। আপনার কোডের একটি উচ্চ পরীক্ষার কভারেজ থাকা আপনাকে প্রচুর ম্যানুয়াল পরীক্ষা না করে বৈশিষ্ট্য বিকাশ চালিয়ে যেতে দেয়।

এর দ্বারা আপনার ম্যানুয়াল পদ্ধতি System.outভাল তবে সেরা নয় his এটি আপনার সময় সম্পাদন করার এক সময় পরীক্ষামূলক। বাস্তব বিশ্বে প্রয়োজনীয়তা পরিবর্তন হতে থাকে এবং বেশিরভাগ সময় আপনি বিদ্যমান ফাংশন এবং ক্লাসগুলিতে প্রচুর পরিমাণে Modifiedaiotns করেন। সুতরাং… প্রতিবার আপনি কোডের ইতিমধ্যে লিখিত অংশটি পরীক্ষা করেন না।

আরও কিছু উন্নত বৈশিষ্ট্য রয়েছে যেমন ইউনাইটে রয়েছে

জবানবন্দি যুক্ত করুন

JUnit কিছু শর্ত পরীক্ষা করার জন্য পদ্ধতি সরবরাহ করে, এই পদ্ধতিগুলি সাধারণত দৃ as়তার সাথে শুরু হয় এবং আপনাকে ত্রুটি বার্তা, প্রত্যাশিত এবং প্রকৃত ফলাফল নির্দিষ্ট করার অনুমতি দেয়

এর মধ্যে কয়েকটি পদ্ধতি রয়েছে

  1. fail([message])- পরীক্ষা ব্যর্থ হতে দেয়। কোডের একটি নির্দিষ্ট অংশ পৌঁছেছে না তা যাচাই করতে ব্যবহৃত হতে পারে। অথবা পরীক্ষার কোড কার্যকর হওয়ার আগে পরীক্ষায় ব্যর্থ হওয়া।
  2. assertTrue(true)/ assertTrue(false)- সর্বদা সত্য / মিথ্যা হবে। পরীক্ষার ফলাফলটি পূর্বনির্ধারিত করতে ব্যবহার করা যেতে পারে, যদি পরীক্ষাটি এখনও প্রয়োগ না করা হয়।
  3. assertTrue([message,] condition)- বুলিয়ান conditionসত্য কিনা তা পরীক্ষা করে।
  4. assertEquals([message,] expected, actual)- দুটি মান সমান কিনা তা পরীক্ষা করে ( equalsযদি পদ্ধতি প্রয়োগ করা হয় তবে অন্যথায় ==রেফারেন্স তুলনা ব্যবহার করে )। দ্রষ্টব্য: অ্যারেগুলির জন্য, এটি রেফারেন্স যা চেক করা হয় এবং সামগ্রীগুলি নয় , এটির জন্য ব্যবহার করুন assertArrayEquals([message,] expected, actual)
  5. assertEquals([message,] expected, actual, delta)- দুটি ভাসমান বা দ্বৈত মান একে অপরের থেকে নির্দিষ্ট দূরত্বে রয়েছে কিনা তা পরীক্ষা করে deltaমান দ্বারা নিয়ন্ত্রিত হয়।
  6. assertNull([message,] object) - পরীক্ষা করে দেখুন যে বস্তুটি শূন্য

ইত্যাদি। সমস্ত উদাহরণের জন্য এখানে পুরো জাভাদোক দেখুন ।

সংকলনের

টেস্ট স্যুটগুলির সাহায্যে আপনি এক অর্থে একাধিক পরীক্ষার ক্লাসগুলিকে একক ইউনিটে একত্রিত করতে পারেন যাতে আপনি সেগুলি একবারে কার্যকর করতে পারেন। একটি সহজ উদাহরণ, পরীক্ষার ক্লাসগুলি MyClassTestএবং MySecondClassTestএকটি স্যুট নামে একত্রিত করে AllTests:

import org.junit.runner.RunWith;
import org.junit.runners.Suite;
import org.junit.runners.Suite.SuiteClasses;

@RunWith(Suite.class)
@SuiteClasses({ MyClassTest.class, MySecondClassTest.class })
public class AllTests { } 

6

JUnit এর প্রধান সুবিধাটি হ'ল ম্যানুয়ালি আপনার প্রিন্ট আউটগুলির সাথে চেক করার চেয়ে এটি স্বয়ংক্রিয় হয়। আপনার লেখা প্রতিটি পরীক্ষা আপনার সিস্টেমে থাকে। এর অর্থ হ'ল আপনি যদি এমন পরিবর্তন করেন যা একটি অপ্রত্যাশিত পার্শ্ব প্রতিক্রিয়া ফেলে তবে আপনার পরীক্ষাটি এটি ধরবে এবং ব্যর্থ হবে তার পরিবর্তে প্রতিটি পরিবর্তনের পরে ম্যানুয়ালি সবকিছু পরীক্ষা করার কথা মনে রাখার চেয়ে।


4

JUnit জাভা প্রোগ্রামিং ভাষার জন্য একক পরীক্ষার কাঠামো। এটি পরীক্ষা চালিত বিকাশের ক্ষেত্রে গুরুত্বপূর্ণ, এবং ইউনিট টেস্টিং ফ্রেমওয়ার্কের একটি পরিবারের সম্মিলিতভাবে xUnit নামে পরিচিত।

JUnit "প্রথম পরীক্ষার পরে কোডিং" ধারণাটি প্রচার করে, যা কোডের টুকরো জন্য পরীক্ষার ডেটা স্থাপনের উপর জোর দেয় যা প্রথমে পরীক্ষা করা যেতে পারে এবং তারপরে প্রয়োগ করা যেতে পারে। এই পদ্ধতির মতো "একটু পরীক্ষা করুন, কিছুটা কোড করুন, কিছুটা পরীক্ষা করুন, কোডটি একটু ..." যা প্রোগ্রামার উত্পাদনশীলতা এবং প্রোগ্রাম কোডের স্থায়িত্ব বৃদ্ধি করে যা প্রোগ্রামার স্ট্রেস এবং ডিবাগিংয়ে ব্যয় করা সময়কে হ্রাস করে।

বৈশিষ্ট্যগুলি JUnit একটি ওপেন সোর্স ফ্রেমওয়ার্ক যা রচনা ও চলমান পরীক্ষার জন্য ব্যবহৃত হয়।

পরীক্ষার পদ্ধতিগুলি সনাক্ত করতে টিক চিহ্ন দেয়।

প্রত্যাশিত ফলাফল পরীক্ষার জন্য জোর সরবরাহ করে।

পরীক্ষা চালানোর জন্য টেস্ট রানারদের সরবরাহ করে।

JUnit পরীক্ষা আপনাকে দ্রুত কোড লিখতে দেয় যা গুণমানকে বাড়ায়

JUnit মার্জিত সহজ। এটি কম জটিল এবং কম সময় নেয়।

JUnit পরীক্ষা স্বয়ংক্রিয়ভাবে চালানো যেতে পারে এবং তারা তাদের নিজস্ব ফলাফলগুলি পরীক্ষা করে এবং তাত্ক্ষণিক প্রতিক্রিয়া সরবরাহ করে। পরীক্ষার ফলাফলের প্রতিবেদনের মাধ্যমে ম্যানুয়ালি ঝুঁটি দেওয়ার দরকার নেই।

JUnit পরীক্ষাগুলি টেস্ট কেসগুলি এবং এমনকী অন্যান্য টেস্ট স্যুটযুক্ত টেস্ট স্যুটেও সংগঠিত করা যেতে পারে।

জুনিট একটি বারে পরীক্ষার অগ্রগতি দেখায় যা সবুজ হয় যদি পরীক্ষা ভাল হয় এবং পরীক্ষা ব্যর্থ হলে এটি লাল হয়ে যায়।


2

JUnit কেন দরকার তা সম্পর্কে আমার কিছুটা ভিন্ন দৃষ্টিভঙ্গি রয়েছে।

আপনি আসলে সমস্ত পরীক্ষার কেস নিজেই লিখতে পারেন তবে এটি জটিল it's সমস্যাগুলি এখানে:

  1. পরিবর্তে System.outআমরা if(value1.equals(value2))0 বা -1 বা ত্রুটি বার্তা যুক্ত করতে এবং ফিরে আসতে পারি । এই ক্ষেত্রে, আমাদের একটি "প্রধান" পরীক্ষার শ্রেণি দরকার যা এই সমস্ত পদ্ধতি চালায় এবং ফলাফলগুলি পরীক্ষা করে এবং কোন পরীক্ষার কেস কে ব্যর্থ করে এবং কোনটি পাস হয় তা বজায় রাখে।

  2. আপনি যদি আরও কিছু পরীক্ষা যুক্ত করতে চান তবে আপনাকে তাদের এই "মূল" পরীক্ষার শ্রেণিতেও যুক্ত করতে হবে। বিদ্যমান কোডে পরিবর্তনসমূহ। আপনি যদি পরীক্ষার ক্লাস থেকে পরীক্ষার কেসগুলি স্বয়ংক্রিয়ভাবে সনাক্ত করতে চান তবে আপনার প্রতিবিম্বটি ব্যবহার করা দরকার।

  3. আপনার সমস্ত পরীক্ষা এবং পরীক্ষা চালানোর জন্য আপনার প্রধান শ্রেণীর গ্রহটি সনাক্ত করা যায়নি এবং এই পরীক্ষাগুলি চালনার জন্য আপনার কাস্টম ডিবাগ / রান কনফিগারেশন লিখতে হবে। আপনি এখনও সেই সবুজ / লাল রঙের আউটপুটগুলি দেখতে পাচ্ছেন না।

এখানে ইউনিত কী করছে:

  1. এটিতে এমন assertXXX()পদ্ধতি রয়েছে যা শর্ত থেকে সহায়ক ত্রুটি বার্তাগুলি মুদ্রণের জন্য এবং ফলাফলগুলিকে "মূল" শ্রেণিতে যোগাযোগ করার জন্য দরকারী।

  2. "মেইন" ক্লাসকে রানার বলা হয় যা ইউনিত দ্বারা সরবরাহ করা হয়, সুতরাং আমাদের কোনও লেখার দরকার নেই। এবং এটি প্রতিফলনের মাধ্যমে পরীক্ষার পদ্ধতিগুলি স্বয়ংক্রিয়ভাবে সনাক্ত করে। আপনি যদি @Testটীকা সহ নতুন পরীক্ষা যুক্ত করেন তবে সেগুলি স্বয়ংক্রিয়ভাবে সনাক্ত হয়ে যায়।

  3. JUnit- এ গ্রিপস ইন্টিগ্রেশন এবং মাভেন / গ্রেড ইন্টিগ্রেশন পাশাপাশি রয়েছে, তাই পরীক্ষা চালানো সহজ এবং আপনাকে কাস্টম রান কনফিগারেশন লিখতে হবে না।

আমি JUnit এ বিশেষজ্ঞ নই, তাই আমি এখন যা বুঝতে পেরেছি তা ভবিষ্যতে আরও যুক্ত করবে।


আমি প্রথম অংশে অনুমান করেছি যে আপনি লিখেছেন কী করা উচিত যদি JUnit ইউনিটকে system.out.println বিবৃতিগুলির চেয়ে কিছুটা আরও ভাল করে পরীক্ষা করার ব্যবস্থা না করত। কিছু প্রোগ্রামারদের এ জাতীয় প্রচেষ্টার ফল হ'ল জুনিত হ'ল এবং তারা এই অটোমেশনটি চালানোর জন্য একটি পৃথক পরীক্ষার কাঠামো লেখার প্রয়োজনীয়তা অনুভব করেছিল, এইভাবে জুনিত জন্মগ্রহণ করেছিলেন, হতে পারে।
সৌরভ পাতিল

1

আপনি পরীক্ষার কাঠামো ব্যবহার না করে কোনও পরীক্ষার কেস লিখতে পারবেন না অন্যথায় আপনার পরীক্ষার কেসগুলির বিচার দেওয়ার জন্য আপনাকে আপনার টেস্টিং ফ্রেমওয়োকটি লিখতে হবে। আপনি টেস্টএনজি ফ্রেমওয়ার্কটি ব্যবহার করতে পারেন এমনটি ছাড়াও এখানে জুনিয়ট ফ্রেমওয়ার্ক সম্পর্কে কিছু তথ্য রয়েছে।

জুনিত কী?

জুনিট জাভা প্রোগ্রামিং ভাষার পাশাপাশি টেস্টিং ফ্রেমওয়ার্কটি ব্যবহৃত হয়। আপনি ইউনিট টেস্টিং এবং ইউআই টেস্টিং উভয়ের জন্য এই অটোমেশন কাঠামোটি ব্যবহার করতে পারেন t এটি আমাদের বিভিন্ন কোডের সাথে আমাদের কোডের প্রয়োগের প্রবাহকে সংজ্ঞায়িত করতে সহায়তা করে। জুনিট "প্রথম পরীক্ষার পরে কোডিং" ধারণার উপর নির্মিত যা আমাদের পরীক্ষার কেসগুলির উত্পাদনশীলতা এবং কোডের স্থায়িত্ব বাড়িয়ে তুলতে সহায়তা করে।

জুনিট পরীক্ষার গুরুত্বপূর্ণ বৈশিষ্ট্যগুলি -

  1. এটি ওপেন সোর্স টেস্টিং ফ্রেমওয়ার্ক যা ব্যবহারকারীদের পরীক্ষার কেসগুলি কার্যকরভাবে লিখতে এবং চালানোর অনুমতি দেয়।
  2. পরীক্ষার পদ্ধতিগুলি সনাক্ত করতে বিভিন্ন ধরণের টিকা সরবরাহ করে।
  3. পরীক্ষার কেস কার্যকর করার ফলাফলগুলি যাচাই করতে বিভিন্ন ধরণের জোর সরবরাহ করে।
  4. এটি কার্যকরভাবে পরীক্ষা চালানোর জন্য পরীক্ষার রানারদেরও দেয়।
  5. এটি খুব সহজ এবং তাই সময় সাশ্রয় করে।
  6. এটি পরীক্ষার মামলাগুলির আকারে আপনার পরীক্ষার কেসগুলি সংগঠিত করার উপায় সরবরাহ করে।
  7. এটি পরীক্ষার কেসকে সহজ এবং মার্জিত উপায়ে ফলাফল দেয় gives
  8. আপনি ग्रहण, অ্যান্ড্রয়েড স্টুডিও, মাভেন এবং পিঁপড়া, গ্রেডল এবং জেনকিন্সের সাথে জুনিটকে সংহত করতে পারেন

0

জুনিআইটি হল এমন একটি পদ্ধতি যা সাধারণত জাভা বিকাশকারী দ্বারা গ্রহণ করা হয়। যেখানে তারা ফাংশনে অনুরূপ প্রত্যাশিত ইনপুট সরবরাহ করতে পারে এবং সেই অনুসারে সিদ্ধান্ত নিতে পারে যে লিখিত কোডটি নিখুঁতভাবে লিখিত হয়েছে বা যদি পরীক্ষার ক্ষেত্রে ব্যর্থ হয় তবে বিভিন্ন পদ্ধতির প্রয়োগেরও প্রয়োজন হতে পারে। জুনিআইটি উন্নয়ন দ্রুত করবে এবং ফাংশনটিতে 0 টি ত্রুটি নিশ্চিত করবে।


0

জুনিট: নিখুঁত ও অ্যাডজাস্ট

এখানে আমার জুনিটি সম্পর্কে দৃষ্টিভঙ্গি।

জুনেআইটি ব্যবহার করা যেতে পারে,
১) system সিস্টেমে নতুন ইউনিট যুক্ত হওয়ার পরে একটি সিস্টেম আচরণ পর্যবেক্ষণ করুন।
2) সিস্টেমে "নতুন" ইউনিটকে স্বাগত জানাতে সিস্টেমে সামঞ্জস্য করুন।
কি? যথাযথভাবে।

বাস্তব জীবন যেমন।

যখন আপনার আত্মীয় আপনার কলেজের হোস্টেলের ঘরে যান,
1) আপনি আরও দায়বদ্ধ হওয়ার ভান করবেন।
২) আপনি যা যা হওয়া উচিত তা আপনি রাখবেন যেমন জুতার র্যাকের জুতো চেয়ারে নেই, আলমারিতে কাপড় চেয়ারে নেই।
3) আপনি সমস্ত নিষেধাজ্ঞা থেকে মুক্তি পাবেন।
4) আপনি নিজের প্রতিটি ডিভাইসে ক্লিনআপ শুরু করবেন।

প্রোগ্রামিং পদে

সিস্টেম: আপনার কোড
ইউএনআইটি: নতুন কার্যকারিতা।
যেহেতু জুনাট কাঠামো জাভা ভাষার জন্য ব্যবহৃত হয় তাই জুনিটি = জাভা ইউএনআইটি (হতে পারে)।

ধরুন আপনার কাছে ইতিমধ্যে একটি ভাল বুলেটপ্রুফ কোড রয়েছে, তবে একটি নতুন প্রয়োজনীয়তা এসেছিল এবং আপনাকে আপনার কোডে নতুন প্রয়োজনীয়তা যুক্ত করতে হবে। এই নতুন প্রয়োজনীয়তা কিছু ইনপুট (টেস্টকেস) এর জন্য আপনার কোডটি ভেঙে দিতে পারে।

এই পরিবর্তনটি মানিয়ে নেওয়ার সহজ উপায় হ'ল ইউনিট টেস্টিং (JUNIT)।
তার জন্য আপনার কোডবেসটি তৈরি করার সময় আপনার কোডের জন্য একাধিক টেস্টকেসগুলি লিখতে হবে। এবং যখনই কোনও নতুন প্রয়োজনীয়তা আসে আপনি কোনও পরীক্ষার ক্ষেত্রে ব্যর্থ হয় কিনা তা দেখতে কেবল সমস্ত পরীক্ষার কেস চালান। যদি না হয় তবে আপনি বাডা ** শিল্পী এবং আপনি নতুন কোড স্থাপন করতে প্রস্তুত।
যদি কোনও টেস্টকেস ব্যর্থ হয় তবে আপনি আপনার কোড পরিবর্তন করুন এবং আপনি সবুজ স্ট্যাটাস না পাওয়া পর্যন্ত আবার টেস্টকেসগুলি চালান।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.