বনাম জুনিত দৃn় প্রতিপাদ্য


85

আজ আমি JUnit পরীক্ষার ক্ষেত্রে JUnit প্রতিবেদনের পরিবর্তে জাভা দৃ as়তার সাথে একটি JUnit পরীক্ষার কেস দেখেছি one একে অপরের চেয়ে বেশি পছন্দ করার জন্য কি কোনও গুরুত্বপূর্ণ সুবিধা বা অসুবিধা রয়েছে?


JUnit দাবী এবং জাভা 'দাবী' কীওয়ার্ডের মধ্যে একেবারে বাস্তব পার্থক্য রয়েছে। এটি মোটেই মতামত-ভিত্তিক প্রশ্ন নয়।
টমাস ডাব্লু

উত্তর:


95

JUnit4- এ JUnit জোর দিয়ে বলা ব্যতিক্রম (আসলে ত্রুটি) জাভা assertকীওয়ার্ড (AssertionError) দ্বারা নিক্ষেপ করা ত্রুটির মতোই , সুতরাং এটি assertTrueস্ট্যাক ট্রেস ছাড়া অন্যরকম এবং আপনি পার্থক্যটি বলতে পারবেন না।

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

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

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


26

আমি অন্তর্নিহিত assertবিবৃতিটির চেয়ে আরও সমৃদ্ধ এপিআই সরবরাহ করার কারণে আমি জুনিতের দাবিগুলি পছন্দ করি এবং আরও গুরুত্বপূর্ণভাবে স্পষ্টতই এর বিপরীতে সক্ষম করার প্রয়োজন হয় না assert, যার জন্য -eaজেভিএম যুক্তি প্রয়োজন।


4
-eaসর্বদা সক্ষম mvn test, কোনও প্রয়োজন নেই -ea। রিচার এপি, ভাল ক্যাচ কখনও কখনও আমি মনে করি পরীক্ষার ক্ষেত্রে এপিআইর অপব্যবহার করা হয়েছে কারণ এটি অ্যাপ্লিকেশনটির অংশ নয় (এপি এপি), আমি এটিকে কেবল আরও সমৃদ্ধ পদ্ধতি বলতে পছন্দ করি।
গ্রিম

20

যখন কোনও পরীক্ষা ব্যর্থ হয় আপনি আরও তথ্য পান।

assertEquals(1, 2); ফলাফল স্বরূপ java.lang.AssertionError: expected:<1> but was:<2>

বনাম

assert(1 == 2); ফলাফল স্বরূপ java.lang.AssertionError

আপনি বার্তা যুক্তি যুক্ত করলে আপনি আরও বেশি তথ্য পেতে পারেন assertEquals


9
চেষ্টা assert 1==2: "1 is not 2";
গ্রিম

@ পিটারর্যাডার -আমটি সক্ষম না থাকাকালীন আসর্ট কীওয়ার্ডটি ব্যবহার করে দেখুন। বা আরও ভাল, JUnit প্রতিবেদনের ব্যবহার করুন যা সর্বদা কাজ করে।
টমাস ডাব্লু

4
@ থমাসডাব্লু যখন -আম সক্ষম হয় না তখন এটি পরীক্ষা হয় না। JUnit সমাবেশগুলি সর্বদা কাজ করে না, আপনি কেবল তখনই কাজ করেন যদি আপনি JUnit কে একটি কাঠামো কী তা ব্যবহার করার সিদ্ধান্ত নেন, এবং ম্যভেনের ক্ষেত্রে কোনও মাভেন নির্ভরতা, একটি খাঁটি নির্ভরতা যা কেবল পরীক্ষার সুযোগে থাকতে হবে। আমাদের এখানে দুটি পক্ষ রয়েছে: আপনি কী পছন্দ করেন? প্রথম দিক : একটি কাঠামো কেবলমাত্র পরীক্ষার সুযোগের উপর নির্ভরশীলতা হিসাবে ব্যবহার করুন, এটি অবশ্যই ডাউনলোড করতে হবে, সেই গ্রহনটি আপনাকে এমন ক্লাসে ব্যবহার করতে দেয় যা সিসিআর / মেইন-ফোল্ডারে নেই তবে সেখানে সংকলন করতে পারবেন না কারণ ম্যাভেনের কেবল পরীক্ষার ক্ষেত্রে জুনিট থাকে- সুযোগ বা দ্বিতীয় দিক : বিল্ট-ইন স্টাফ ব্যবহার করুন।
গ্রিম

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

বৈশিষ্ট্য কোডে দৃser়তার পৃথক প্রসঙ্গে - দৃ programming় প্রোগ্রামিং অনুশীলনের পক্ষে গুরুত্বপূর্ণ, যদিও এটি আসলে প্রশ্নের বিষয় নয় - স্প্রিং এবং গুগল পেয়ারা উভয়েরই দৃ classes় ক্লাস রয়েছে যা সর্বদা সক্ষম থাকে। আমি নির্ভুলতা নিশ্চিত করতে প্যারামিটার এবং রাজ্য পূর্বশর্ত হিসাবে উদার ব্যবহারের পরামর্শ দিচ্ছি। এর বাইরে, পারফরম্যান্স-সমালোচনামূলক অঞ্চলে, এমন একটি ছোট্ট অঞ্চল assertথাকতে পারে যেখানে জাভা পছন্দনীয় হতে পারে - যথার্থতা যাচাইয়ের জন্য যা কার্য সম্পাদনকে প্রভাবিত করবে এবং এটি ডিফল্টরূপে সেরা অক্ষম। তবে আমার অভিজ্ঞতাটি হ'ল বেশিরভাগ দাবিদাওয়া সর্বদা চালু থাকা উচিত।
টমাস ডাব্লু

8

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


0

আমি বলব যদি আপনি JUnit ব্যবহার করেন তবে আপনার JUnit প্রতিবেদনগুলি ব্যবহার করা উচিত। assertTrue()মূলত একইরকম assert, অন্যথায় কেন JUnit ব্যবহার করবেন?


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

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

4
@ চিজপলস "নিয়মিত পুরাতন দৃsert় বিবৃতিগুলি" আসলে ইউ ইউনিতের দাবিগুলির চেয়ে সাম্প্রতিক।
ডলমেন

0

আপনি যদি একচেটিয়াভাবে চকচকে এবং নতুন স্টাফ ব্যবহার করেন তবে এটি প্রয়োগ করতে পারে না, তবে জোর মধ্যে 1.4SE অবধি জোর দেওয়া হয়নি। সুতরাং, আপনার যদি পুরানো প্রযুক্তি সহ কোনও পরিবেশে অবশ্যই কাজ করা উচিত, আপনি সামঞ্জস্যের কারণে JUnit এর দিকে ঝুঁকতে পারেন।

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