সাধারণ পরীক্ষা করার জন্য, ডাটাবেস অ্যাক্সেস লেয়ারটিকে উপহাস করা পুরোপুরি গ্রহণযোগ্য। আপনি কল করেন getName()
, এটি ডিএওকে কল করে যে ঠাট্টা করা হয়েছে এবং প্রথম জন হিসাবে "জন" এবং শেষ নামটির জন্য "স্মিথ" ফিরিয়ে দেয়, তাদের একত্রিত করে এবং সবকিছু নিখুঁত। সেখানে কোনও ডাটাবেসকে বাস্তবে পরীক্ষা করার দরকার নেই।
যুক্তি কিছুটা জটিল হয়ে উঠলে বিষয়গুলি আরও কিছুটা হয়ে যায়। আপনার যদি কোনও পদ্ধতি "createOrUpdateUser (...)" থাকে তবে কী হবে। আপনি যদি ডাটাবেসটিকে উপহাস করেছেন তবে আপনি যাচাই করতে পারবেন যে কোনও নির্দিষ্ট প্যারামিটার দিয়ে কোনও নির্দিষ্ট পদ্ধতি একবার কল করা হয়েছিল যখন মোক কোন বস্তু না ফেরায় এবং যখন কোনও বিদ্যমান অবজেক্ট ফিরিয়ে দেয় তখন ডাটাবেসে আলাদা পদ্ধতি চালু করা হয়। এটি সেই অস্পষ্ট লাইনে পৌঁছতে শুরু করে যেখানে মেমরির ডেটাবেসে একটি বিশেষজ্ঞের স্পিন আপ করতে এবং পূর্বনির্ধারিত ডেটা সহ সেই কোডটি পরীক্ষা করা সহজ হতে পারে (বিশেষত এটি ইতিমধ্যে সেখানে থাকলে)।
কিছু প্রকৃত কোডে আমি (বিক্রয় বিন্দুতে) কাজ করেছি, আমাদের একটি resumeSuspededTransaction(...)
পদ্ধতি ছিল । এটি ডাটাবেস থেকে কোনও বস্তুতে (এবং এর উপাদানগুলি) লেনদেনকে টেনে আনবে এবং ডাটাবেস আপডেট করবে। আমরা এটি উপহাস করেছিলাম এবং কোথাও কোডে একটি বাগ লুকিয়ে রেখেছিল ডাটাবেসে ডেটা সিরিয়ালাইজেশন এবং ডেসরিয়ালাইজেশন সহ (আমরা একটি টাইপ পরিবর্তন করেছি যা ডাটাবেসে আলাদাভাবে সিরিয়ালযুক্ত হয়েছিল)।
মোক আমাদের ত্রুটিটি প্রদর্শন করতে পারেনি কারণ এটি তার সুখী পথটি ফিরিয়েছিল - লেনদেনকে সিরিয়ালাইজ করুন, মোককে এটি সংরক্ষণ করুন, এটি মোক থেকে নির্মোচন করুন, পরীক্ষা করুন যে তারা সমান। যাইহোক, আপনি যখন ডাটাবেসে শীর্ষস্থানীয় শূন্যের সাথে কোনও বস্তু সিরিয়াল করবেন তখন এটি সেগুলি হ্রাস পাচ্ছিল এবং তারপরে শূন্য ছাড়াই আবার একটি স্ট্রিংয়ে পুনরায় সংযোজন করছিল। আমরা সমস্যা সমাধানের মাধ্যমে ডেটাবেস ছাড়াই বাগটি ধরেছিলাম (এটি উপস্থিত থাকলে এটি স্পষ্ট করা এতটা কঠিন ছিল না)।
পরে, আমরা সেখানে একটি ডাটাবেস রেখেছিলাম এবং বুঝতে পেরেছিলাম যে আমরা যদি পরিবর্তে মেমরির ডাটাবেজে একটি পরীক্ষা করে চলে যাই তবে বাগটি সেই জুনিট পরীক্ষার মাধ্যমে কখনই অর্জন করতে পারত না।
মেমোরিতে ডাটাবেসের সুবিধাগুলি রয়েছে:
- এগুলি পরীক্ষার জন্য দ্রুত অ্যাকাউন্ট (সারণী এবং এ জাতীয় সেটআপ করার জন্য ডিবিএর প্রয়োজন ছাড়াই) সজ্জিত করা যেতে পারে
- তথ্যটি সেই পরীক্ষার জন্য প্রাক কনফিগার করা যেতে পারে
- টেস্টটি শেষ হয়ে গেলে পরীক্ষার পিছনে ফিরে যাওয়ার বিষয়ে চিন্তা করার দরকার নেই
- প্রতিটি পরীক্ষার নিজস্ব মেমরি ডাটাবেসে থাকে যাতে দুটি পরীক্ষা একই সাথে চলতে থাকে তবে আপনাকে চিন্তা করতে হবে না
- এগুলি এমন সিস্টেমে চালানো যেতে পারে যাগুলির আসল ডাটাবেসের সাথে সংযোগ নেই