আমি সম্প্রতি একটি নিবন্ধ পড়েছি যাতে বলা হয়েছে যে মক অবজেক্টগুলি প্রায়শই ভুল বোঝাবুঝি এবং অপব্যবহার হয়। এমন কোন স্পষ্ট বিদ্রূপ বিরোধী নিদর্শন রয়েছে যা আমি সন্ধান করতে পারি?
আমি সম্প্রতি একটি নিবন্ধ পড়েছি যাতে বলা হয়েছে যে মক অবজেক্টগুলি প্রায়শই ভুল বোঝাবুঝি এবং অপব্যবহার হয়। এমন কোন স্পষ্ট বিদ্রূপ বিরোধী নিদর্শন রয়েছে যা আমি সন্ধান করতে পারি?
উত্তর:
সাধারণ কংক্রিটের ক্লাসগুলি উপহাস করা দেখে আমি ঘৃণা করি। উদাহরণস্বরূপ নিম্নলিখিত সাধারণ ক্লাসটি গ্রহণ করুন যার অন্য কোনও কিছুর উপর নির্ভরশীলতা নেই:
public class Person
{
private readonly string _firstName;
private readonly string _surname;
public Person(string firstName, string surname)
{
if (String.IsNullOrEmpty(firstName))
{
throw new ArgumentException("Must have first name");
}
if (String.IsNullOrEmpty(surname))
{
throw new ArgumentException("Must have a surname");
}
_firstName = firstName;
_surname = surname;
}
public string Name
{
get
{
return _firstName + " " + _surname;
}
}
}
এই শ্রেণীর সাথে জড়িত যে কোনও পরীক্ষায় আমি 'আইফারসন' এর মতো কিছু ইন্টারফেসের চেয়ে বরং সত্যিকারের ইনস্ট্যান্টেশন এবং ব্যবহার করা হত, একটি বিদ্রূপিত ব্যবহার হয়েছিল এবং প্রত্যাশার উপর সেট ছিল। আসলটি ব্যবহার করে আপনার পরীক্ষাটি আরও বাস্তবসম্মত place (আপনার কাছে প্যারামিটারের চেক রয়েছে এবং 'নাম' সম্পত্তিটির বাস্তব প্রয়োগ রয়েছে)। এর মতো সরল শ্রেণীর জন্য আপনি আপনার পরীক্ষাগুলি ধীর করে নিচ্ছেন না, কম নির্দ্বিধায় বা যুক্তিটিকে জঘন্য করে তুলছেন না (অন্য কোনও শ্রেণির পরীক্ষা করার সময় আপনাকে নামটি ডাকা হয়েছিল বলে জানা প্রয়োজন) - যা মশকরা / stubbing।
এটির এক্সটেনশন হিসাবে আমি লোককে পরীক্ষাগুলি লিখতে দেখেছি যেখানে মক একটি প্রত্যাশা নিয়ে সেট আপ করা হয়, তারপরে মোকটিকে সরাসরি পরীক্ষায় ডাকা হয়। নিঃসন্দেহে পরীক্ষা সর্বদা পাস হবে ... হুম মিমি ...
এটি সুস্পষ্ট মনে হতে পারে তবে: উত্পাদন কোডে মক অবজেক্টগুলি ব্যবহার করবেন না! আমি একাধিক উদাহরণ দেখেছি যেখানে উত্পাদন কোড নির্দিষ্ট মক অবজেক্টের বৈশিষ্ট্যের উপর নির্ভর করে ( MockHttpServletRequest
উদাহরণস্বরূপ স্প্রিংফ্রেমওয়ার্ক থেকে)।
আমার মতে এটি অত্যধিক পদ্ধতিতে অনুরোধের জন্য অনুরোধ করা উচিত। আমি অনুভব করি যে এটি ইজিমকের মতো কয়েকটি বিদ্রূপমূলক ফ্রেমওয়ার্ক দ্বারা প্রয়োগ করা একটি অনুশীলন, যেখানে অতিরিক্ত পদ্ধতি আহ্বান করার আগে ডিফল্ট মক আচরণটি ব্যর্থ হয়ে যায় যা ঠিক আগে নির্দিষ্ট করা হয়নি। এই ধরণের কঠোর মক পদ্ধতিতে চেক করা ভঙ্গুর নকশাগুলির দিকে পরিচালিত করতে পারে যেখানে কোডের সর্বাধিকতম পরিবর্তনটি মূল কার্যকারিতাটি একইরূপে থাকা সত্ত্বেও পরীক্ষাগুলির পুরো স্যুটকে ব্যর্থ করতে পারে।
এর একটি সমাধান মকগুলির পরিবর্তে স্টাবগুলি ব্যবহার শুরু করছে। এই প্রবন্ধটি সম্পর্কে আমি বিশেষভাবে আলোকিত করেছিলাম এমন একটি নিবন্ধ মকিতোর জাভাডোকের একটিতে পাওয়া গেছে: http://docs.mockito.googlecode.com/hg/org/mockito/Mockito.html (দেখুন "২. কীভাবে কিছু হতবাক?" ), এর সাথে লিঙ্ক করুন: http://monkeyisland.pl/2008/07/12/should-i-wારી-about-the- अनपेक्षित / ।
আমি এতক্ষণে মকিতোর সাথে কাজ করা উপভোগ করেছি কারণ এটি এই কঠোর উপহাসের আচরণটি প্রয়োগ করে না বরং পরিবর্তে স্টাব ব্যবহার করে। এটি পুরো মক অবজেক্টের পরিবর্তে নির্দিষ্টগুলিতে পরীক্ষা পদ্ধতি প্রয়োগ করে; সুতরাং আপনি কেবলমাত্র পরীক্ষা পদ্ধতিতে যা আপনার পরীক্ষার দৃশ্যে সত্যই গুরুত্বপূর্ণ really
এখানে কয়েকটি বই রয়েছে এবং আমি সুপারিশ করতে পারি যে এই বিষয়টিকে স্পর্শ করুন এবং মশকরা এবং সাধারণ:
xUnit প্যাটার্নস
আর্ট অফ ইউনিট টেস্টিং: উদাহরণস্বরূপ নেট
নেক্সট জেনারেশন জাভা টেস্টিং: টেস্টএনজি এবং অ্যাডভান্সড কনসেপ্টস (এই বইটি বেশিরভাগই টেস্টএনজি সম্পর্কিত তবে উপহাস সম্পর্কে একটি সুন্দর অধ্যায় রয়েছে)
Answer.RETURNS_SMART_NULLS
জন্য সেটিংস রয়েছে যা এটি সনাক্ত করতে সহায়তা করে।
আমি আমার অভিজ্ঞতায় কয়েকটি অ্যান্টি-প্যাটার্ন পর্যবেক্ষণ করেছি।
অন্যথায় বিদ্রূপের সাথে আমার অভিজ্ঞতা বিশেষত মকিতো একটি বাতাসের হাওয়া হয়ে গেছে। এগুলি লেখার এবং বজায় রাখা খুব সহজ পরীক্ষা করেছে made জিডাব্লুটিটি ভিউ / উপস্থাপক ইন্টারঅ্যাকশন টেস্টিং জিডাব্লুটিটিস্টেক্যাসের চেয়ে মকসের সাথে আরও অনেক সহজ।
আমি দেখতে পেয়েছি যে পরীক্ষাগুলি কোনও অ্যাপ্লিকেশনটির একাধিক স্তর জুড়ে মককে বিশেষভাবে ডাইফার করা ও পরিবর্তন করা শক্ত করে। তবে আমি মনে করি সাম্প্রতিক বছরগুলিতে উন্নত মক ফ্রেমওয়ার্ক এপিআই এর মাধ্যমে (আমি যেখানে সুবিধাজনক সেখানে জেমক ব্যবহার করি) দ্বারা এটি প্রশমিত করা হয়েছে।
5 বা 6 বছর আগে এপিআই এর মতো ইজিমক শক্তিশালী তবে খুব জটিল ছিল। প্রায়শই যে টেস্ট কোডটি এটি ব্যবহার করে তা হ'ল আকারের আদেশগুলি কোডের চেয়ে এটি আরও জটিল হয়ে থাকে। এরপরে আমি টিমগুলিকে প্রভাবিত করার চেষ্টা করেছি আমি খুব অল্প পরিমাণে এটি ব্যবহার করতে এবং সাধারণ হস্তশিল্প দ্বারা নির্মিত মকগুলি দিয়েছিলাম যা পরীক্ষার জন্য বিশেষত ইন্টারফেসগুলির বিকল্প বিকল্প বাস্তবায়ন ছিল।
সম্প্রতি এ সম্পর্কে আমার দৃ opinions় মতামত নরম হয়ে উঠেছে কারণ মশকরা এপিআই এর পরীক্ষাগুলি তৈরি করেছে যা তাদের আরও পঠনযোগ্য করে তোলে। মূলত আমি চাই যে আমার কোডটি (পরীক্ষাসহ) অন্য বিকাশকারীদের যাতে তারা অস্পষ্ট এপিআই কলগুলির ঝাঁকুনির মধ্য দিয়ে চলেছে এমন মনে না করে পরিবর্তনযোগ্য হয়।