জুনট 4 বনাম টেস্টএনজি - আপডেট 2013 - 2014 [বন্ধ]


88

JUnit 4 এবং TestNG তুলনামূলক থাকত। দুটি টেস্টিং ফ্রেমওয়ার্কের পক্ষে কি কি?


আপনি যদি বৈশিষ্ট্যের তুলনাটি দেখছেন, তবে আপনি ব্যবহারের তুলনাটি উল্লেখ করতে ইচ্ছুক হলে jUnit 4 Vs testNG এর উপর মকিওংয়ের একটি ভাল নিবন্ধ রয়েছে । কপিল আশার একটি চমৎকার নিবন্ধ আছে যা সাহায্য করে!
আনশু

71
আমি এসও এর পক্ষে অত্যন্ত সহায়ক এর মত প্রশ্নগুলি পেয়েছি ... আমি এটি জিজ্ঞাসা করার ঝুঁকি নেওয়ার জন্য ধন্যবাদ জানাতে চাই এবং এটি বন্ধ না করার জন্য অভিনন্দন!
ব্যবহারকারী 1445967

আপনার শ্রোতার পছন্দগুলির বিরুদ্ধে যাওয়ার উপায়: D
ctekk

4
এত বছর পরে আবার এই প্রশ্নটি দেখছি। মজার বিষয় হ'ল - আমি ষড়যন্ত্রের গন্ধ পাচ্ছি! আমার প্রশ্নটি সম্পূর্ণরূপে বিভিন্ন কার্যকারিতার উপর নিবদ্ধ ছিল, তারপরে একটি "সম্প্রদায়" সম্পাদনা হয়েছিল যা আমার প্রশ্নটিকে "উপকার ও কনস" এ সম্পাদনা করে এবং তারপরে মতামতের ভিত্তিতে প্রশ্নটি বন্ধ হয়ে যায়। লমাও।
ctekk

উত্তর:


29

আমি আজ টেস্টএনজি এবং JUnit4 এর সাথে তুলনা করছিলাম এবং টেস্টিং-ফ্রেমওয়ার্কগুলিতে আমার সীমিত অভিজ্ঞতার সাথে আমি উল্লেখ করতে পারি যে প্রধান সুবিধাটি হ'ল ডেটা-সরবরাহকারী ধারণার সাথে প্যারামিট্রাইজড টেস্টগুলি পরিচালনা করার জন্য টেস্টএনজির আরও মার্জিত উপায় রয়েছে।

যতদুর আমি JUnit4 সঙ্গে বলতে পারেন আপনি পরামিতি প্রতিটি সেট জন্য পৃথক পরীক্ষা শ্রেণী (সঙ্গে এটি স্থাপিত সঙ্গে আপনি পরীক্ষা করতে চান তৈরি করতে @RunWith(Parameterized.class))। টেস্টএনজি দিয়ে আপনার একক পরীক্ষার ক্লাসে একাধিক ডেটা সরবরাহকারী থাকতে পারে, তাই আপনি আপনার সমস্ত পরীক্ষা একক শ্রেণির জন্যও একক পরীক্ষার শ্রেণিতে রাখতে পারেন।

এখনও অবধি এটিই আমি JUnit4 এর উপর টেস্টএনজির সুবিধা হিসাবে চিহ্নিত করতে পারি।

ইন্টেলিজ আইডিইএতে বাক্সের বাইরে টেস্টএনজি এবং ইউনাইটের জন্য সমর্থন অন্তর্ভুক্ত রয়েছে। তবে, Eclipse কেবল JUnit কে বাক্সের বাইরে সমর্থন করে এবং এটি কার্যকর করতে একটি টেস্টএনজি প্লাগইন ইনস্টল করা দরকার।

তবে, টেস্টএনজির সাথে আমার আরও বিরক্তিকর সমস্যাটি হ'ল এটি হল যে PowerMockTestCaseআপনি যদি পরীক্ষাগুলিতে নির্ভরতা বিদ্রূপ করার জন্য পাওয়ারমক ব্যবহার করছেন তবে আপনার পরীক্ষার ক্লাসগুলি বাড়ানো দরকার । স্পষ্টতই কোনও বিশেষ পদ্ধতিতে বা পাওয়ার সিস্টেমের মাধ্যমে পাওয়ারমক ব্যবহার করার সময় আপনার পরীক্ষার কাঠামোটি সম্পর্কে জানতে হবে অবজেক্ট-কারখানাটি কনফিগার করার উপায় রয়েছেtestng.xml স্যুট সংজ্ঞা এটি ভেঙে গেছে বলে মনে হচ্ছে। আমি পরীক্ষার-ক্লাসগুলি পরীক্ষা-কাঠামোর ক্লাসগুলি বাড়ানো পছন্দ করি না, এটি হ্যাকিশ বলে মনে হয়।

আপনি যদি পাওয়ারমক ব্যবহার না করেন তবে এটি অবশ্যই সমস্যা নয়, তবে সর্বোপরি আমি এই ধারণাটি পেয়েছি যে JUnit4 আরও ভাল সমর্থনযোগ্য।


4
প্যারামিটারাইজড পরীক্ষাগুলির বিকল্প বাস্তবায়ন রয়েছে এমন নয়, উদাহরণস্বরূপ কোড. google.com/p/ junitparams এবং এর মধ্যে কোনওটি যদি আপনার পছন্দ না হয় তবে আপনি নিজের লেখা লিখতে পারেন - যা আমি ইউনিতের এক্সটেনসিবিলিটি সম্পর্কে পছন্দ করি। ;)
এস্কো লুন্তোলা

17

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

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

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

  • আপনি @Testটেস্টং সহ একটি শ্রেণি চিহ্নিত করতে পারেন , যার অর্থ: প্রতিটি পাবলিক পদ্ধতি একটি পরীক্ষা। জুনিটে আপনাকে @Testপ্রতিটি পদ্ধতিতে অনুলিপি / পেস্ট করতে হবে ।

উভয়ের সাথে বিরক্তি হ'ল হ্যামক্রাস্টটি যেভাবে ইউনিতের সাথে একত্রিত হয় এবং যেভাবে জুনিয়ট টেস্টঞ্জের সাথে বান্ডিল হয়। ম্যাভেনের পরিবর্তিত জারগুলি রয়েছে যা এই সমস্যাটি নয়।

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


9

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


1

আপনি যদি জাভা / স্কেলা প্রকল্পে কাজ করেন এবং গ্রেডল আপনার পছন্দের বিল্ড টুল, মনে রাখবেন যে ScalaTestফ্রেমওয়ার্কটি কেবলমাত্র JUnitRunnerআপনার স্কাল পরীক্ষা চালাতে পারে। অন্য কথায়, আপনার একটি পছন্দ আছে:

  • জাভা জুনিট পরীক্ষা + স্কাল টেস্টগুলি JUnitRunner => আরও ভাল গ্রেডল ইন্টিগ্রেশন দিয়ে চলছে
  • জাভা টেস্টএনজি টেস্ট + স্কালাল টেস্ট রান স্কাল রানার => দরিদ্র গ্রেডেল ইন্টিগ্রেশন এর সাথে চলে, যেহেতু স্কালাল টেস্ট রানার গ্রেডলের দৃষ্টিকোণ থেকে একক বাল্ক কাজ।

0

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


7
এই উত্তরটি কেবল প্রশ্নের সাথে সম্পূর্ণ অপ্রাসঙ্গিক ....
অ্যাড্রিয়ান শাম

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

4
এই উত্তরটি পাওয়ারমক কী তা ভুল বুঝে। এটি মকিতোর প্রতিস্থাপন নয়, তবে এমন পরিপূরক যা মকিতোকে মোকিতো একা করতে পারে না এমন কিছু জিনিসকে মশকরা করতে দেয় (স্থিতিশীল পদ্ধতি, চূড়ান্ত শ্রেণি)।
কাঠি ফিগার

0

সংক্ষেপে..

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

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

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