আমার একটি ক্লাস রয়েছে যা ১ টি প্রধান শ্রেণিতে এবং ২ টি ছোট ক্লাসে রিফ্যাক্টর হয়। প্রধান ক্লাসগুলি ডেটাবেস ব্যবহার করে (আমার ক্লাসের অনেক কিছুই) এবং ইমেল প্রেরণ করে। সুতরাং প্রধান শ্রেণিতে একটি IPersonRepositoryএবং একটি IEmailRepositoryইনজেকশন রয়েছে যা তার পালা 2 টি ছোট ক্লাসে প্রেরণ করে।
এখন আমি প্রধান ক্লাসটি পরীক্ষা করতে চাই এবং ক্লাসের অভ্যন্তরীণ কাজগুলিকে একীকরণ না করতে শিখেছি, কারণ ইউনিট পরীক্ষা না ভেঙে আমাদের অভ্যন্তরীণ কাজগুলি পরিবর্তন করতে সক্ষম হওয়া উচিত।
কিন্তু শ্রেণী ব্যবহার IPersonRepositoryএবং IEmailRepository, আমি আছে (উপহাস / ডামি) জন্য কিছু পদ্ধতি এর জন্য ফলাফল উল্লেখ করতে IPersonRepository। মূল শ্রেণি বিদ্যমান ডেটার উপর ভিত্তি করে কিছু ডেটা গণনা করে এবং এটি প্রদান করে। যদি আমি এটি পরীক্ষা করতে চাই, আমি দেখছি না যে আমি কীভাবে কোনও পরীক্ষা লিখতে পারি তা উল্লেখ না করেই যে IPersonRepository.GetSavingsByCustomerIdএক্সটার্নাল এক্স। তবে তারপরে আমার ইউনিট পরীক্ষাটি অভ্যন্তরীণ কাজগুলি সম্পর্কে 'জানে', কারণ এটি 'জানে' কোন পদ্ধতিগুলি উপহাস করা উচিত এবং কোনটি নয়।
অভ্যন্তরীণ সম্পর্কে পরীক্ষা না জেনে আমি কীভাবে এমন একটি শ্রেণীর পরীক্ষা করতে পারি যা নির্ভরতা ইঞ্জেকশন করেছে?
পটভূমি:
আমার অভিজ্ঞতার মতো প্রচুর পরীক্ষাগুলি সংগ্রহস্থলগুলির জন্য মক তৈরি করে এবং তারপরে মকগুলির জন্য সঠিক ডেটা সরবরাহ করে অথবা কার্যকর করার সময় যদি কোনও নির্দিষ্ট পদ্ধতি বলা হয়েছিল test যেভাবেই হোক, পরীক্ষাটি ইন্টার্নালগুলি সম্পর্কে জানে।
এখন আমি তত্ত্বটি সম্পর্কে একটি উপস্থাপনা দেখেছি (যা আমি এর আগে শুনেছি) যা পরীক্ষার বাস্তবায়ন সম্পর্কে জানা উচিত নয়। প্রথমত আপনি এটি পরীক্ষা করে দেখছেন না যে এটি কীভাবে কাজ করে, তবে কারণ আপনি যখন এখন বাস্তবায়ন পরিবর্তন করেন তখন সমস্ত ইউনিট পরীক্ষা ব্যর্থ হয় কারণ তারা বাস্তবায়ন সম্পর্কে 'জানেন'। আমি পরীক্ষাগুলি বাস্তবায়নের বিষয়ে অজানা থাকা ধারণাটি পছন্দ করতে চাই, আমি কীভাবে এটি সম্পাদন করতে জানি না।
IPersonRepositoryঅবজেক্টের প্রত্যাশা করবে , সেই ইন্টারফেস এবং এটি বর্ণিত সমস্ত পদ্ধতি আর কোনও "অভ্যন্তরীণ" নয়, সুতরাং এটি পরীক্ষার কোনও সমস্যা নয়। আপনার আসল প্রশ্নটি "জনসাধারণের মধ্যে খুব বেশি প্রকাশ না করে কীভাবে আমি ছোট ইউনিটগুলিতে ক্লাসগুলি সংশোধন করতে পারি" হওয়া উচিত। উত্তরটি হ'ল "সেই ইন্টারফেসগুলি সরু রাখুন" (উদাহরণস্বরূপ ইন্টারফেস বিভাজন নীতিটি আটকে রেখে)। এটি @ ডেভিডআর্নোর উত্তরের আইএমএইচও পয়েন্ট 2 (আমার ধারণা, অন্য উত্তরে আমার এটি পুনরাবৃত্তি করার প্রয়োজন নেই)।