মকিতো বনাম জেএমকিতের মধ্যে তুলনা - কেন মকিতো জেএমকিতের চেয়ে ভাল ভোট দিয়েছে? [বন্ধ]


124

আমি যা উপহাস ফ্রেমওয়ার্ক আমার প্রকল্প জন্য ব্যবহার করতে তদন্ত করছি এবং এটিকে নিচে narrowed আছে JMockit এবং Mockito

আমি লক্ষ্য করেছি যে মকিতোকে স্ট্যাকওভারফ্লোতে " জাভার জন্য সেরা মক ফ্রেমওয়ার্ক " হিসাবে ভোট দেওয়া হয়েছিল । জেমকিতের " মকিং টুল তুলনা ম্যাট্রিক্স " এর
বৈশিষ্ট্যগুলির তুলনা করার ক্ষেত্রে এটি প্রদর্শিত হয় যে জেমকিতের একাধিক আলাদা বৈশিষ্ট্য রয়েছে।

যে কেউ কি কোনো নির্দিষ্ট তথ্য (না মতামত) আছে Mockito যা দিয়ে অর্জন করা যাবে না কি করতে পারেন JMockit এবং তদ্বিপরীত?


2
সম্ভবত ভাল ব্যবহারযোগ্যতা mockito জন্য, BTW আমি মনে করি না JMockit আরো Mockito ... চেয়ে পরিপক্ক না
অ্যালোয়িজ্ Cochard

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

9
বন্ধ না করার জন্য +1। এই উত্তরের মান অনেক আছে। প্রযুক্তি নির্বাচন করা সহজ নয় এবং এই প্রশ্নগুলি অনেক সময় বাঁচাতে পারে। প্রকৃতপক্ষে সঠিক উত্তর নাও থাকতে পারে তবে স্ট্যাকওভারফ্লো কোনও প্রশ্ন ছাড়াই প্রশ্নাবলীর জন্য জায়গা করে নেওয়া উচিত।
mhstnsc

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

@ অ্যালোস - আপনি কি এমন দৃ concrete় উদাহরণ দিতে পারেন যেখানে জোকিমিট মকিতোর চেয়ে কম পরিপক্ক দেখায়?
নিতিনস

উত্তর:


140

আপডেট সেপ্টেম্বর 2019: স্প্রিং বুটের দ্বারা সমর্থিত একমাত্র মশকরা ফ্রেমওয়ার্ক হ'ল মকিতো । আপনি যদি বসন্ত ব্যবহার করেন তবে উত্তরটি বেশ স্পষ্ট।


আমি বলব প্রতিযোগিতাটি জোকিমিট এবং পাওয়ারমকের মধ্যে , তারপরে মকিতো

আমি "সরল" jMock এবং EasyMock ছেড়ে যাব কারণ তারা কেবল প্রক্সি এবং সিজিএলআইবি ব্যবহার করে এবং জাভা 5 ইনস্ট্রুমেন্টটি নতুন ফ্রেমওয়ার্কগুলির মতো ব্যবহার করে না।

jMock 4 বছরেরও বেশি সময় ধরে স্থিতিশীল প্রকাশ পায় নি। আরএম 1 থেকে আরসি 2 এ যেতে jMock 2.6.0 এর জন্য 2 বছর প্রয়োজন ছিল এবং তারপরে এটি প্রকাশিত হওয়ার আরও 2 বছর আগে।

প্রক্সি এবং সিজিএলআইবি বনাম উপকরণ সম্পর্কিত:

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

শেষ পর্যন্ত, প্রচলিত উপহাস সরঞ্জামগুলির প্রযুক্তিগত সীমাবদ্ধতাগুলি উত্পাদন কোডে নিম্নলিখিত নকশার সীমাবদ্ধতা আরোপ করে:

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

উপরেরটি http://jmockit.org/about.html থেকে অনুলিপি করা হয়েছে । আরও, এটি নিজের (জেমকিত), পাওয়ারমক এবং মকিতোকে বিভিন্ন উপায়ে তুলনা করে:

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

জেমকিত বনাম পাওয়ারমক

  • প্রথমত, পাওয়ারমক বিদ্রূপের জন্য একটি সম্পূর্ণ এপিআই সরবরাহ করে না, পরিবর্তে অন্য সরঞ্জামে এক্সটেনশন হিসাবে কাজ করে যা বর্তমানে ইজিমক বা মকিতো হতে পারে। এটি অবশ্যই সেই সরঞ্জামগুলির বিদ্যমান ব্যবহারকারীদের জন্য একটি সুবিধা।
  • অন্যদিকে, জেএমকিত সম্পূর্ণ নতুন এপিআই সরবরাহ করে, যদিও এর মূল এপিআই (প্রত্যাশা) ইজিমক এবং জেমক উভয়ের সমান। যদিও এটি দীর্ঘতর লার্নিং কার্ভ তৈরি করে, এটি জেএমকিতকে একটি সহজ, আরও সুসংগত এবং সহজে API ব্যবহারের সুযোগ দেয়।
  • জেমকিত প্রত্যাশা এপিআইয়ের তুলনায়, পাওয়ারমক এপিআই আরও "নিম্ন-স্তরের", ব্যবহারকারীদের পরীক্ষার জন্য কোন ক্লাস প্রস্তুত করার প্রয়োজন তা নির্দিষ্ট করতে বাধ্য করে (@ প্রিপার্পেয়ারটেষ্ট ({ClassA.class, ...}) টীকা সহ ) এবং উত্পাদন কোডে উপস্থিত হতে পারে এমন বিভিন্ন ধরণের ভাষা নির্মানের সাথে মোকাবিলা করার জন্য নির্দিষ্ট এপিআই কলগুলির প্রয়োজন: স্থির পদ্ধতি (মকস্ট্যাটিক (ClassA.class)), নির্মাণকারী (দমন (কনস্ট্রাক্টর (ClassXyz.class))), কনস্ট্রাক্টর আহ্বান ( প্রত্যাশী নতুন (AClass.class), আংশিক mock (createPartialMock (ClassX.class, "মেথডোমক")) ইত্যাদি)
  • জেমকিত প্রত্যাশার সাথে, সমস্ত ধরণের পদ্ধতি এবং নির্মাতাকে বিশুদ্ধভাবে ঘোষিত উপায়ে ঠাট্টা-বিদ্রূপ করা হয়, নিয়মিত প্রকাশের মাধ্যমে @ মস্কৃত টীকায়নের মাধ্যমে বা সদস্যদের কোনভাবেই রেকর্ড করা প্রত্যাশা ছাড়াই কেবল "আন-বিদ্রূপ" দ্বারা নির্দিষ্ট করা হয়; এটি হ'ল বিকাশকারী পরীক্ষার শ্রেণীর জন্য কিছু ভাগ করে নেওয়া "মক ফিল্ডস" বা স্বতন্ত্র পরীক্ষার পদ্ধতিগুলির জন্য কিছু "স্থানীয় মক ক্ষেত্র" এবং / অথবা "মক প্যারামিটার" ঘোষণা করে (এবং এই শেষের ক্ষেত্রে @ মকড টীকাগুলি প্রায়শই তা করবে না প্রয়োজন)।
  • জেএমকিত-এ কিছু উপলব্ধ ক্ষমতা যেমন মক্কের সমতুল্য এবং হ্যাশকোড, ওভাররাইড পদ্ধতি এবং অন্যদের জন্য সমর্থন বর্তমানে পাওয়ারমকটিতে সমর্থিত নয়। এছাড়াও, পরীক্ষার কার্য সম্পাদন হিসাবে নির্দিষ্ট বেস প্রকারের দৃষ্টান্তগুলি এবং মক প্রয়োগগুলিকে ক্যাপচার করার জেএমকিতের ক্ষমতার সমতুল্য নেই, পরীক্ষার কোডটি সত্যিকারের বাস্তবায়ন ক্লাস সম্পর্কে কোনও জ্ঞান না রেখে।
  • পাওয়ারমক উপহাসকৃত ক্লাসগুলির পরিবর্তিত সংস্করণ উত্পন্ন করার জন্য কাস্টম শ্রেণির লোডারগুলি (সাধারণত পরীক্ষার শ্রেণিতে প্রতিটি) ব্যবহার করে। কাস্টম শ্রেণীর লোডারগুলির এইরকম ভারী ব্যবহার তৃতীয় পক্ষের লাইব্রেরিগুলির সাথে দ্বন্দ্বের জন্ম দিতে পারে, তাই পরীক্ষার ক্লাসগুলিতে মাঝে মধ্যে @ পাওয়ারমকআইগনোর ("package.to.be.ignored") টিকা ব্যবহার করার প্রয়োজন হয়।
  • জেএমকিট (একটি "জাভা এজেন্ট" মাধ্যমে রানটাইম উপকরণ) দ্বারা ব্যবহৃত পদ্ধতিটি সহজ এবং নিরাপদ, যদিও এটি জেডিএম 1.5 তে বিকাশকালে জেভিএমের "-জাভাজনেন্ট" পরামিতিটি পাস করার প্রয়োজন হয় না; জেডিকে ১.6++ তে (যা সর্বদা উন্নয়নের জন্য ব্যবহার করা যেতে পারে, এমনকি এটি পুরানো সংস্করণে প্রযোজ্য হলেও) এরকম কোনও প্রয়োজন নেই, যেহেতু জেমকিত সংযুক্তি এপিআই ব্যবহার করে জাভা এজেন্টকে স্বচ্ছভাবে চাহিদা অনুযায়ী লোড করতে পারে।

সাম্প্রতিক আর একটি উপহাসের সরঞ্জাম হ'ল মকিতো। যদিও এটি পুরানো সরঞ্জামগুলির সীমাবদ্ধতা (jMock, EasyMock) কাটিয়ে উঠার চেষ্টা করে না, তবুও এটি উপহাসের সাথে আচরণের পরীক্ষা করার একটি নতুন স্টাইল প্রবর্তন করে। জেএমকিতও এই বিকল্প শৈলীটি যাচাইকরণ API এর মাধ্যমে সমর্থন করে।

জেমকিত বনাম মকিতো

  • রেকর্ডের (যখন (...)) এবং যাচাইকরণ (যাচাইকরণ (...)) এর মধ্যে কোড পৃথক করার জন্য মকিতো তার এপিআই-তে স্পষ্ট কলগুলিতে নির্ভর করে। এর অর্থ হল পরীক্ষার কোডে কোনও মক অবজেক্টের যে কোনও আহ্বানের জন্য মকিং এপিআইতে কল প্রয়োজন হবে। অতিরিক্তভাবে, এটি যখন (...) এবং যাচাই (মক) ... কলগুলি পুনরাবৃত্তি করতে পারে।
  • জেমকিতের সাথে, অনুরূপ কোনও কল উপস্থিত নেই। অবশ্যই, আমাদের কাছে নতুন নন-স্ট্রাইকএক্সপ্যাক্টিকেশনস () এবং নতুন যাচাইকরণ () কনস্ট্রাক্টর কল রয়েছে তবে সেগুলি পরীক্ষায় একবার (সাধারণত) ঘটে এবং তা বিদ্রূপ পদ্ধতি এবং কনস্ট্রাক্টরের কাছে আমন্ত্রণ থেকে সম্পূর্ণ পৃথক।
  • মকিতো এপিআইতে উপহাসের পদ্ধতিগুলিতে অনুরোধের জন্য ব্যবহৃত সিনট্যাক্সে বেশ কয়েকটি অসঙ্গতি রয়েছে। রেকর্ড পর্যায়ে, আমাদের কাছে যখন কল হয়েছে (মক.মকডমথোড (আরগস)) ... যাচাইকরণের পর্যায়ে এই একই কলটি যাচাই (মক) .মোকড ম্যাথোড (আরগস) হিসাবে লেখা হবে। লক্ষ্য করুন যে প্রথম ক্ষেত্রে উপহাসকৃত ম্যাথোডে আমন্ত্রণ সরাসরি মক অবজেক্টে করা হয়, অন্য ক্ষেত্রে এটি যাচাই (মোকার) দ্বারা ফেরত বস্তুর উপর করা হয়।
  • জেএমকিতের তেমন কোনও অসঙ্গতি নেই কারণ উপহাসের পদ্ধতিগুলিতে আমন্ত্রণগুলি সর্বদা মশকরা দৃষ্টান্তগুলিতে সরাসরি করা হয়। (কেবলমাত্র একটি ব্যতিক্রম সহ: একই বিদ্রূপিত দৃষ্টিতে অনুরোধের সাথে মিল রাখতে, একটি onInstance (মক) কল ব্যবহার করা হয়, যার ফলে onInstance (mock) .mockMethod (আরগস) এর মতো কোড হয়; তবে বেশিরভাগ পরীক্ষাগুলি এটি ব্যবহারের প্রয়োজন হবে না। )
  • অন্য উপহাসের সরঞ্জামগুলির মতো যা পদ্ধতিতে শৃঙ্খলাবদ্ধ / মোড়কের উপরে নির্ভর করে, শূন্য পদ্ধতিতে স্ট্যাবি করার সময় মকিতোও বেমানান সিনট্যাক্সে চলে। উদাহরণস্বরূপ, আপনি যখন লিখেছেন (মকোডলিস্ট.জেট (1)) তারপর থ্রো করুন (নতুন রানটাইম এক্সেকশন ()); একটি অ-শূন্য পদ্ধতি এবং doThrow (নতুন রানটাইম এক্সেকশন ()) এর জন্য when একটি অকার্যকর জন্য। জেমকিতের সাথে এটি সর্বদা একই বাক্য গঠন: মকডলিস্টক্লিয়ার (); ফলাফল = নতুন রানটাইম এক্সেকশন ();।
  • তবুও মকিতো গুপ্তচরদের ব্যবহারের ক্ষেত্রে আরও একটি অসঙ্গতি দেখা দেয়: "মকস" যা গুপ্তচর দৃষ্টিতে বাস্তব পদ্ধতিগুলি কার্যকর করতে দেয়। উদাহরণস্বরূপ, যদি গুপ্তচর একটি ফাঁকা তালিকাকে বোঝায়, তারপরে লেখার পরিবর্তে (স্পাই.জেট (0)) .পরে রিটার্ন ("foo") আপনাকে doReturn ("foo") লিখতে হবে। যখন (গুপ্তচর)। 0)। জেমকিতের সাহায্যে গতিশীল বিদ্রূপ বৈশিষ্ট্যটি গুপ্তচরদের অনুরূপ কার্যকারিতা সরবরাহ করে, তবে এই সমস্যাটি ছাড়াই বাস্তব পদ্ধতিগুলি কেবল রিপ্লে পর্যায়ে কার্যকর করা হয় during
  • ইজিমোক এবং জেমক, জাভার জন্য প্রথম বিদ্রূপকারী এপিআইগুলিতে, মোক অবজেক্টগুলির জন্য (পূর্বনির্ধারিতভাবে) অপ্রত্যাশিত নিমন্ত্রণগুলি মঞ্জুরি দেয় না এমন জোক পদ্ধতিগুলির প্রত্যাশিত অনুরোধগুলির রেকর্ডিংয়ের উপর পুরোপুরি দৃষ্টি নিবদ্ধ ছিল। সেই এপিআইগুলি এমন মক অবজেক্টগুলির জন্য অনুমোদিত আমন্ত্রণগুলির রেকর্ডিং সরবরাহ করে যা অপ্রত্যাশিত নিমন্ত্রণগুলি মঞ্জুরি দেয় তবে এটি দ্বিতীয় শ্রেণীর বৈশিষ্ট্য হিসাবে বিবেচিত হয়েছিল। অধিকন্তু, এই সরঞ্জামগুলির সাহায্যে পরীক্ষার অধীনে কোডটি প্রয়োগ করার পরে বিদ্রূপগুলিতে স্পষ্টভাবে আমন্ত্রণগুলি যাচাই করার কোনও উপায় নেই। এই জাতীয় সমস্ত যাচাই স্পষ্টভাবে এবং স্বয়ংক্রিয়ভাবে সঞ্চালিত হয়।
  • মকিতোতে (এবং ইউনিটিলস মোকতেও), বিপরীত দৃষ্টিভঙ্গি নেওয়া হয়। পরীক্ষার সময় যে বস্তুগুলি ঘটতে পারে তা বিদ্রূপ করার সমস্ত আহ্বানগুলি রেকর্ড করা আছে কি না, অনুমোদিত, কখনও প্রত্যাশিত নয়। পরীক্ষার অধীনে কোডটি প্রয়োগ করার পরে যাচাইকরণ স্পষ্টভাবে সম্পাদিত হয়, স্বয়ংক্রিয়ভাবে কখনই না।
  • উভয় পন্থা অত্যন্ত চরম এবং ফলস্বরূপ অনুকূল থেকে কম। জেমকিত প্রত্যাশা ও যাচাইকরণগুলি এমন একমাত্র এপিআই যা বিকাশকারীকে প্রতিটি পরীক্ষার জন্য নির্বিঘ্নে কঠোর (ডিফল্ট দ্বারা প্রত্যাশিত) এবং অ-কঠোর (ডিফল্টরূপে অনুমোদিত) মক অনুরোধের সর্বোত্তম সমন্বয় চয়ন করতে দেয় choose
  • আরও স্পষ্ট করে বলার জন্য, মকিতো এপিআই-র নীচের সমস্যা রয়েছে। যদি আপনাকে যাচাই করা দরকার যে পরীক্ষার সময় একটি শূন্য-বিহীন বিদ্রূপ পদ্ধতিতে একটি অনুরোধ ঘটেছে, তবে পরীক্ষার জন্য সেই পদ্ধতি থেকে ফেরতের মান প্রয়োজন যা প্রত্যাবর্তনের ধরণের জন্য ডিফল্ট থেকে আলাদা হয়, তবে মকিতো পরীক্ষায় সদৃশ কোড থাকবে: একটি যখন (mock.someMethod ()) .তখন রেকর্ড পর্বে পুনরায় (xyz) কল এবং যাচাইকরণের পর্যায়ে একটি যাচাই (মক) .সোমমঠোড () জেমকিতের সাথে, একটি কঠোর প্রত্যাশা সর্বদা রেকর্ড করা যায়, যা স্পষ্টভাবে যাচাই করতে হবে না। বিকল্পভাবে, কোনও আহ্বান গণনার সীমাবদ্ধতা (বার = 1) কোনও রেকর্ডকৃত অ-কঠোর প্রত্যাশার জন্য নির্দিষ্ট করা যেতে পারে (মকিতো সহ এ জাতীয় সীমাবদ্ধতা কেবলমাত্র একটি যাচাই (মক, সীমাবদ্ধতা কল) এ নির্দিষ্ট করা যেতে পারে)।
  • ক্রমানুসারে যাচাইকরণের জন্য এবং সম্পূর্ণ যাচাইয়ের জন্য মকিতোর দুর্বল সিনট্যাক্স রয়েছে (এটি যা উপহাসের জন্য সমস্ত অনুরোধগুলি সুস্পষ্টভাবে যাচাই করা হয়েছে তা যাচাই করে)। প্রথম ক্ষেত্রে, একটি অতিরিক্ত অবজেক্ট তৈরি করা দরকার, এবং এটিতে যাচাই করার জন্য কল করা হয়: InOrder inOrder = inOrder (mock1, mock2, ...)। দ্বিতীয় ক্ষেত্রে, যাচাইকরণমোরইন্ট্রেকশনস (মক) বা যাচাইকরণজিরো ইন্টারন্টেকশনস (মক 1, মক 2) এর মতো কল করা দরকার।
  • জেমকিতের সাহায্যে আপনি কেবল নতুন যাচাইকরণের পরিবর্তে নতুন ভেরিফিকেশনসইনআর্ডার () বা নতুন ফুলওয়ারিফিকেশন () লিখুন (বা উভয় প্রয়োজনীয়তা একত্রিত করার জন্য নতুন ফুলওয়ারিফিকেশনআইনআর্ডার ())। কোন মক অবজেক্ট জড়িত তা নির্দিষ্ট করার দরকার নেই। কোনও অতিরিক্ত উপহাস API কল নেই। এবং একটি বোনাস হিসাবে, একটি আদেশযুক্ত যাচাইকরণ ব্লকের অভ্যন্তরে যাচাই করা না হওয়া () যাচাইকরণের মাধ্যমে আপনি অর্ডার-সংক্রান্ত যাচাইকরণগুলি করতে পারেন যা মকিতোতে কেবল অসম্ভব।

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

(অনুমোদিত, উত্স পক্ষপাতদুষ্ট হতে পারে, তবে ভাল ...)

আমি জেমকিতের সাথে যেতে চাই । এটি ব্যবহার করা সবচেয়ে সহজ, নমনীয় এবং আপনি যখন ক্লাস পরীক্ষা করার জন্য ক্লাসকে নিয়ন্ত্রণ করতে না পারেন (বা সামঞ্জস্যের কারণে আপনি এটি ভেঙে ফেলতে পারেন না) তখন এমনকি সমস্ত ক্ষেত্রে এমনকি জটিল এবং পরিস্থিতিগুলির পক্ষেও কাজ করে।

জেমকিতের সাথে আমার অভিজ্ঞতাগুলি খুব ইতিবাচক হয়েছে।


1
আমি কখনই জেমোকিট ব্যবহার করি নি, তবে আমি আলোচনায় আরেকটি যুক্তি যুক্ত করতে চাই: সমস্ত গুগল ট্র্যাডওয়ার্কের সাথে গুগল ট্রেন্ডসের তুলনা একবার দেখুন। 06.06.2012 হিসাবে, মকিতো এবং ইজিমকের সাথে তুলনা করার সময় জেএমকিত এমনকি গুগল ট্রেন্ডস গ্রাফটিতেও দেখায় না। এবং কাঠামো বাছাই করার সময় ব্যবহারকারীর সংখ্যাও গুরুত্বপূর্ণ।
যন্ত্রপাতি

3
এটা বেশ আশ্চর্যজনক। মকিতো এবং জেমকআইটি আমাকে গুগলে যথাক্রমে 409 'এবং 83' হিট দেয়। অবশ্যই জেমকআইটি কমপক্ষে দেখানো উচিত।

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

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

1
উত্তরটি 8 বছরের পুরানো, উত্তরে অনেক কিছুই আর সঠিক নয়। একটি বিষয় হ'ল জেএমকিতের -javaagent১.৪২ সাল থেকে পতাকা প্রয়োজন কারণ আপনি জাভা ৯ এর পর থেকে আর আত্ম-সংযুক্তি করতে পারবেন না এবং যথাযথ কাজের আশপাশ খুঁজে পাওয়া সম্ভবত বিকাশকারীর সুযোগে ছিল না। আরেকটি বিষয় হ'ল জেমকিত আর ব্যক্তিগত পদ্ধতি এবং নির্মাতাদের উপহাস করার অনুমতি দেয় না, যখন পাওয়ারমক আফিকে করে।
ভ্যাম্পায়ার

24

আমি মকিতো এবং জেমকিত উভয়ের সাথেই কাজ করেছি এবং তাদের সাথে আমার অভিজ্ঞতা হ'ল:

  • Mockito:

    • অন্তর্নিহিত উপহাস (-> আরও ভাল ব্যবহারযোগ্যতা, তবে মকগুলিতে অনুমতিপ্রাপ্ত পদ্ধতি কলগুলি সনাক্ত করতে ব্যর্থ হওয়ার ঝুঁকি রয়েছে)
    • সুস্পষ্ট যাচাই
  • EasyMock:

    • বিদ্রূপ করা
    • অন্তর্নিহিত যাচাইকরণ
  • JMockit:

    • উভয় সমর্থন করে
  • এছাড়াও, জেমকিতের অন্যান্য সুবিধা:

    • আপনি যদি স্ট্যাটিক পদ্ধতি / নির্মাণকারী ইত্যাদির উপহাস করছেন (যেমন ইউটি ছাড়াই খুব পুরানো লিগ্যাসি কোড বেস প্রসারিত করা) তবে আপনার দুটি পছন্দ থাকতে পারে: 1) পাওয়ারমক এক্সটেনশান সহ মকিতো / ইজিমক বা 2) জমকিত
    • অন্তর্নির্মিত কভারেজ রিপোর্ট

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


নেই stackoverflow.com/questions/8003278/... "verifyNoMoreInteractions" যদি আপনার সাথে mockito ছদ্ম স্পষ্ট বিদ্রূপকারী চান আমি অনুমান
rogerdpack

15

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

আমি এই নিবন্ধটি দ্বারা বিস্মিত হয়েছিল

একটি (স্বীকৃত বৃহত্তর) শেখার বক্ররেখার পরে, jMockit এখন উপহাসের জন্য আমার প্রধান একক পরীক্ষার কাঠামো।


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

4 বছর পরে, আপনি এখনও jMockit আপনার প্রাথমিক পরীক্ষার কাঠামো হিসাবে ব্যবহার করছেন? আমি প্রথমবারের জন্য এটি চেষ্টা করে দেখছি এবং এটি নিয়ে কয়েকটি ইস্যুতে চলছে তবে আমি জানি না যে এটি জেমকিত কীভাবে কাজ করে তা আমার ভুল বোঝাবুঝি কিনা, বা এটি এমন কোনও বৈশিষ্ট্য যা কেবল বিদ্যমান নেই।
এরিক বি

jMockit আর ব্যক্তিগত পদ্ধতি পরীক্ষার সমর্থন করে না। ডিনক্যাপসুলেশন শ্রেণিটি ধীরে ধীরে হ্রাস করা হয়েছিল এবং তারপরে সংস্করণ 1.47 এ পুরোপুরি সরানো হয়েছে। jmockit.github.io/changes.html
পাইট্রি

4

আমাদের লিগ্যাসি কোডবেসের সহজ পরীক্ষার জন্য (প্রচুর স্ট্যাটিক পদ্ধতি কল ইত্যাদির সাথে) জেএমকিত অমূল্য হয়েছে। [ আমার ব্লগে একটি নিবন্ধের জন্য নির্লজ্জ প্লাগ ]


0

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

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