একটি সংগ্রহস্থল কী করে তা আপনার ডোমেন থেকে আপনার ডাল কাঠামোতে যেমন এনএইচবারনেট বা মতবাদ বা আপনার এসকিউএল-এক্সিকিউটিভ ক্লাসগুলিতে অনুবাদ করা হয়। এর অর্থ হ'ল আপনার সংগ্রহশালাটি তার দায়িত্ব পালনের জন্য উক্ত ফ্রেমওয়ার্কে পদ্ধতিগুলি কল করবে: আপনার সংগ্রহস্থল ডেটা আনার জন্য প্রয়োজনীয় প্রশ্নগুলি তৈরি করে। যদি আপনি কোনও ওআরএম-কাঠামো ব্যবহার না করেন (আমি আশা করি আপনার ...), সংগ্রহস্থলটি এমন জায়গা হবে যেখানে কাঁচা এসকিউএল-বিবৃতি তৈরি করা হবে।
এই পদ্ধতির সর্বাধিক বুনিয়াদি হ'ল সংরক্ষণ: বেশিরভাগ ক্ষেত্রে এটি খালি সংগ্রহস্থল থেকে কাজটির একক (বা সেশন) এর দিকে চলে যাবে।
public void Save(Car car)
{
session.Save(car);
}
তবে আসুন অন্য উদাহরণটি দেখুন, উদাহরণস্বরূপ তার আইডি দিয়ে গাড়ি আনয়ন ching এটি দেখতে মত হতে পারে
public function GetCarWithId(String id)
{
return Session.QueryOver<Car>()
.Where(x => x.Id == id)
.SingleOrDefault();
}
তবুও খুব জটিল নয়, তবে আপনি একাধিক শর্তের সাথে কল্পনা করতে পারেন ('ভক্সওয়াগেন' গ্রুপের সমস্ত ব্র্যান্ডের জন্য আমাকে 2010 এর পরে তৈরি গাড়িগুলি দিন) এটি জটিল হয়ে ওঠে। সুতরাং সত্য টিডিডি ফ্যাশনে আপনার এটি পরীক্ষা করা দরকার। এই কাজ করার বিভিন্ন উপায় আছে।
বিকল্প 1: ওআরএম কাঠামোয় করা কলগুলি মক করুন
অবশ্যই, আপনি সেশন-অবজেক্টকে উপহাস করতে পারেন এবং ডান কলগুলি করা হয়েছে তা সহজভাবে দৃ .়ভাবে জানাতে পারেন। যদিও এই সংগ্রহস্থলের পরীক্ষা, আসলেই test- নয় চালিত কারণ আপনি শুধু পরীক্ষা যে সংগ্রহস্থলের অভ্যন্তরীণভাবে পথ আপনি এটা করতে চান দেখায়। পরীক্ষাটি মূলত বলে যে 'কোডটি দেখতে এমন হওয়া উচিত'। তবুও, এটি একটি বৈধ পন্থা তবে এটি মনে হয় যে এই ধরণের পরীক্ষার খুব কম মূল্য রয়েছে।
বিকল্প 2: (পুনরায়) পরীক্ষাগুলি থেকে ডাটাবেস তৈরি করুন
কিছু ডাল-ফ্রেমওয়ার্ক আপনাকে টেবিলে ডোমেন ম্যাপ করার জন্য তৈরি ম্যাপিং ফাইলগুলির উপর ভিত্তি করে ডাটাবেসের সম্পূর্ণ কাঠামো তৈরির ক্ষমতা দেয়। এই ফ্রেমওয়ার্কগুলির জন্য পরীক্ষার প্রথম ধাপে ইন-মেমরি ডাটাবেস সহ ডাটাবেস তৈরি করা এবং ইন-মেমোরি ডাটাবেসে ডাল-ফ্রেমওয়ার্ক ব্যবহার করে অবজেক্ট যুক্ত করা হয়। এর পরে, পদ্ধতিগুলি কাজ করে কিনা তা পরীক্ষা করতে আপনি ইন-মেমরি ডাটাবেজে রিপোজিটরিটি ব্যবহার করতে পারেন। এই পরীক্ষাগুলি ধীর, তবে খুব বৈধ এবং আপনার পরীক্ষা চালায় drive এটির জন্য আপনার ডাল-কাঠামো থেকে কিছুটা সহযোগিতা প্রয়োজন।
বিকল্প 3: একটি আসল ডাটাবেসে পরীক্ষা করুন
আরেকটি পদ্ধতির মধ্যে আসল ডাটাবেস পরীক্ষা করা এবং ইউনিটকে আলাদা করা। আপনি এটি বিভিন্ন উপায়ে করতে পারেন: লেনদেনের মাধ্যমে আপনার পরীক্ষাগুলি ঘিরে ফেলুন, ম্যানুয়ালি পরিষ্কার করুন (বজায় রাখা খুব কঠিন হিসাবে সুপারিশ করবেন না), প্রতিটি পদক্ষেপের পরে ডাটাবেসটিকে পুরোপুরি পুনর্নির্মাণ করুন ... আপনি যে অ্যাপ্লিকেশনটি তৈরি করছেন তার উপর নির্ভর করে আপনি এটি করতে পারেন বা হতে পারে সম্ভব হয় না। আমার অ্যাপ্লিকেশনগুলিতে আমি উত্স নিয়ন্ত্রণ থেকে সম্পূর্ণ স্থানীয় ডেটাবেস ডেটাবেস তৈরি করতে পারি এবং সংগ্রহস্থলগুলিতে আমার ইউনিটসেটগুলি একে অপরের থেকে পরীক্ষাগুলি সম্পূর্ণরূপে বিচ্ছিন্ন করতে লেনদেন ব্যবহার করে (উন্মুক্ত লেনদেন, তথ্য সন্নিবেশ, পরীক্ষার ভাণ্ডার, রোলব্যাক লেনদেন)। প্রতিটি বিল্ড প্রথমে স্থানীয় উন্নয়ন ডেটাবেস সেট আপ করে এবং তারপরে সেই স্থানীয় বিকাশ ডাটাবেজে থাকা সংগ্রহস্থলের জন্য লেনদেন-বিচ্ছিন্ন ইউনিটসেটগুলি সম্পাদন করে। এটা '
ডাল পরীক্ষা করবেন না
আপনি যদি এনএইচবারনেটের মতো ডাল কাঠামো ব্যবহার করেন তবে সেই কাঠামোটি পরীক্ষা করার প্রয়োজন এড়িয়ে চলুন। আপনি আপনার ম্যাপিং ফাইলগুলি সংরক্ষণ, পুনরুদ্ধার এবং তারপরে একটি ডোমেন অবজেক্টের সাথে সমস্ত কিছু ঠিক আছে কিনা তা নিশ্চিত করার জন্য পরীক্ষা করতে পারেন (কোনও ধরণের ক্যাশে অক্ষম করার বিষয়টি নিশ্চিত করুন) তবে এটি আপনাকে লেখার মতো অন্যান্য পরীক্ষাগুলির মতো প্রয়োজনীয় নয়। আমি বাচ্চাদের শর্তযুক্ত অভিভাবকদের সংগ্রহের জন্য এটি বেশিরভাগ ক্ষেত্রেই করি to
আপনার সংগ্রহস্থলগুলির ফিরে আসার পরীক্ষা করার সময় আপনি কেবলমাত্র আপনার ডোমেন অবজেক্টে চিহ্নিতকরণের কিছু সম্পত্তি মেলে কিনা তা পরীক্ষা করে দেখতে পারেন। এটি একটি আইডি হতে পারে তবে পরীক্ষাগুলিতে এটি মানব পাঠযোগ্য সম্পত্তি যাচাই করার জন্য প্রায়শই বেশি উপকারী। '2010 এর পরে তৈরি সমস্ত গাড়ি আমাকে পান ....' এ এটি পাঁচটি গাড়ি ফেরত দেওয়া হয়েছে এবং লাইসেন্স প্লেটগুলি 'এখানে তালিকা প্রবেশ করান' তা পরীক্ষা করে দেখতে পারে। যোগ করা সুবিধা হ'ল এটি আপনাকে বাছাই করার বিষয়ে ভাবতে বাধ্য করে এবং আপনার পরীক্ষাটি স্বয়ংক্রিয়ভাবে বাছাই করতে বাধ্য করে। আপনি অবাক হবেন যে কতগুলি অ্যাপ্লিকেশন একাধিকবার বাছাই করেছে (ডাটাবেস থেকে সাজানো প্রত্যাবর্তন, ভিউ অবজেক্ট তৈরির পূর্বে বাছাই করা এবং তারপরে ভিউ অবজেক্টটি সাজানো, ঠিক একই ক্ষেত্রে সমস্ত ক্ষেত্রে ) বা স্পষ্টতই সংগ্রহস্থলের সাজসজ্জা অনুমান করে এবং দুর্ঘটনাক্রমে মুছে ফেলা হবে ইউআই ভাঙা পথে যেভাবেই হোক।
'ইউনিট পরীক্ষা' কেবল একটি নাম
আমার মতে, ইউনিট পরীক্ষাগুলি বেশিরভাগই ডাটাবেসে আঘাত করা উচিত নয়। আপনি একটি অ্যাপ্লিকেশন তৈরি করেন যাতে কোডের প্রতিটি অংশের জন্য যা উত্স থেকে ডেটা প্রয়োজন তা কোনও সংগ্রহস্থলের সাহায্যে করে এবং সেই সংগ্রহস্থলটি নির্ভরতা হিসাবে ইনজেকশনের ব্যবস্থা করা হয়। এটি সহজ উপহাস এবং আপনার পছন্দ মতো সমস্ত টিডিডি-মঙ্গলভাবের অনুমতি দেয়। তবে শেষ পর্যন্ত আপনি নিশ্চিত করতে চান যে আপনার সংগ্রহস্থলগুলি তাদের দায়িত্বগুলি সম্পাদন করে এবং যদি এটি করার সহজতম উপায়টি যদি কোনও ডাটাবেসকে আঘাত করে, তবে ঠিক তাই। 'ইউনিট পরীক্ষাগুলি ডাটাবেসটিকে স্পর্শ করা উচিত নয়' এমন ধারণাটি আমি দীর্ঘদিন ছেড়ে দিয়েছি এবং শিখেছি যে এটি করার সত্যিকারের কারণগুলি রয়েছে। তবে আপনি যদি এটি স্বয়ংক্রিয়ভাবে এবং বারবার করতে পারেন তবেই। এবং আবহাওয়া আমরা এই জাতীয় পরীক্ষাকে 'ইউনিট পরীক্ষা' বা একটি 'ইন্টিগ্রেশন টেস্ট' বলি।