আমি একটি উপাদান লিখছি যা, একটি জিপ ফাইল দেওয়া দরকার:
- ফাইলটি আনজিপ করুন।
- আনজিপড ফাইলগুলির মধ্যে একটি নির্দিষ্ট dll সন্ধান করুন।
- প্রতিবিম্বের মধ্য দিয়ে যে dll লোড করুন এবং এটিতে কোনও পদ্ধতির ডাক দিন।
আমি এই উপাদানটি পরীক্ষা করতে চাই।
আমি এমন কোড লিখতে প্ররোচিত হলাম যা সরাসরি ফাইল সিস্টেমের সাথে ডিল করে:
void DoIt()
{
Zip.Unzip(theZipFile, "C:\\foo\\Unzipped");
System.IO.File myDll = File.Open("C:\\foo\\Unzipped\\SuperSecret.bar");
myDll.InvokeSomeSpecialMethod();
}
তবে লোকেরা প্রায়শই বলে, "ইউনিট টেস্টগুলি লিখবেন না যা ফাইল সিস্টেম, ডাটাবেস, নেটওয়ার্ক ইত্যাদির উপর নির্ভর করে" "
আমি যদি এটি ইউনিট-পরীক্ষামূলক বন্ধুত্বপূর্ণ উপায়ে লিখি তবে আমি মনে করি এটি এর মতো দেখায়:
void DoIt(IZipper zipper, IFileSystem fileSystem, IDllRunner runner)
{
string path = zipper.Unzip(theZipFile);
IFakeFile file = fileSystem.Open(path);
runner.Run(file);
}
হ্যাঁ! এখন এটি পরীক্ষাযোগ্য; আমি DoIt পদ্ধতিতে পরীক্ষার দ্বিগুণ (উপহাস) ভোজন করতে পারি। তবে কী দামে? কেবলমাত্র এই পরীক্ষণযোগ্য করতে আমার এখন 3 টি নতুন ইন্টারফেস সংজ্ঞায়িত করতে হয়েছিল। এবং কি, ঠিক, আমি পরীক্ষা করছি? আমি পরীক্ষা করছি যে আমার DoIt ক্রিয়াটি এর নির্ভরতাগুলির সাথে সঠিকভাবে ইন্টারঅ্যাক্ট করে। এটি পরীক্ষা করে না যে জিপ ফাইলটি সঠিকভাবে আনজিপ করা হয়েছিল, ইত্যাদি doesn't
মনে হচ্ছে না আমি আর কার্যকারিতা পরীক্ষা করছি। মনে হচ্ছে আমি কেবল শ্রেণি ইন্টারঅ্যাকশন পরীক্ষা করছি।
আমার প্রশ্নটি হ'ল ফাইল সিস্টেমের উপর নির্ভরশীল এমন কোনও কিছুর ইউনিট পরীক্ষার যথাযথ উপায় কী?
সম্পাদনা করুন আমি। নেট ব্যবহার করছি, তবে ধারণাটি জাভা বা নেটিভ কোডটিও প্রয়োগ করতে পারে।
myDll.InvokeSomeSpecialMethod();
তুমি কোথায় পরীক্ষা হবে এটি উভয় সাফল্য সঠিকভাবে কাজ করে এবং পরিস্থিতিতে ব্যর্থ তাই আমি ইউনিট পরীক্ষা করবে না DoIt
কিন্তু DllRunner.Run
যে বলেন ডবল যাচাই করুন একটি ইউনিট পরীক্ষা অপব্যবহার যে সমগ্র প্রক্রিয়ার কাজ হবে একটি গ্রহণযোগ্য অপব্যবহার এবং এটি ইউনিট পরীক্ষার