ইউনিট পরীক্ষার জন্য কীভাবে আইওসি কনটেইনার ব্যবহার করা যেতে পারে? আইওসি ব্যবহার করে কোনও বিশাল সমাধান (50+ প্রকল্প) মকগুলি পরিচালনা করা কি কার্যকর? কোন অভিজ্ঞতা? কোন সি # লাইব্রেরি যা ইউনিট পরীক্ষায় এটি ব্যবহারের জন্য ভাল কাজ করে?
ইউনিট পরীক্ষার জন্য কীভাবে আইওসি কনটেইনার ব্যবহার করা যেতে পারে? আইওসি ব্যবহার করে কোনও বিশাল সমাধান (50+ প্রকল্প) মকগুলি পরিচালনা করা কি কার্যকর? কোন অভিজ্ঞতা? কোন সি # লাইব্রেরি যা ইউনিট পরীক্ষায় এটি ব্যবহারের জন্য ভাল কাজ করে?
উত্তর:
সাধারণভাবে বলতে গেলে, ডিআইডি পাত্রে ইউনিট পরীক্ষার জন্য প্রয়োজনীয় হওয়া উচিত নয় কারণ ইউনিট টেস্টিংয়ের জন্য দায়িত্ব পৃথক করা।
কনস্ট্রাক্টর ইঞ্জেকশন ব্যবহার করে এমন একটি ক্লাস বিবেচনা করুন
public MyClass(IMyDependency dep) { }
আপনার সম্পূর্ণ প্রয়োগে, এটি এমন হতে পারে যে পিছনে একটি বিশাল নির্ভরশীলতা গ্রাফটি লুকিয়ে রয়েছে IMyDependency
তবে একটি ইউনিট পরীক্ষায়, আপনি এটিকে সমস্ত একক টেস্টের দ্বিগুণ করে নিন ।
টেস্ট দ্বিগুণ উৎপন্ন করতে আপনি মোখ বা গণ্ডারগড়ির মতো গতিশীল মোকস ব্যবহার করতে পারেন, তবে এটির প্রয়োজন নেই।
var dep = new Mock<IMyDependency>().Object;
var sut = new MyClass(dep);
কিছু ক্ষেত্রে, একটি অটো-বিদ্রূপকারী ধারকটি রাখা ভাল হতে পারে, তবে আপনাকে সেই ডিআই কনটেইনার ব্যবহার করার দরকার নেই যা উত্পাদন অ্যাপ্লিকেশন ব্যবহার করে।
ইউনিট পরীক্ষার জন্য আইওসি কনটেইনার কীভাবে ব্যবহার করা যেতে পারে?
আইওসি প্রোগ্রামিং প্যারাডিমগুলি প্রয়োগ করবে যা ইউনিট টেস্টিংকে বিচ্ছিন্নকরণে (অর্থাত্ মোক ব্যবহার করা) সহজ করে তুলবে: ইন্টারফেসের ব্যবহার, কোনও নতুন (), কোনও সিলেটলেট ...
তবে পরীক্ষার জন্য আইওসি পাত্রে ব্যবহার করা সত্যই প্রয়োজন হয় না, এটি কেবল কিছু সুবিধা সরবরাহ করবে যেমন মক এর ইনজেকশন তবে আপনি নিজে এটি করতে পারেন।
আইওসি ব্যবহার করে কোনও বিশাল সমাধান (50+ প্রকল্প) মকগুলি পরিচালনা করা কি কার্যকর?
আমি নিশ্চিত নই যে আপনি আইওসি ব্যবহার করে বিদ্রূপ পরিচালনা করার অর্থ কী। যাইহোক, আইওসি পাত্রে সাধারণত পরীক্ষার ক্ষেত্রে মক ইঞ্জেকশন করা ছাড়াও আরও অনেক কিছু করা যায়। এবং যদি আপনার কাছে শালীন আইডিই সমর্থন থাকে যা রিফ্যাক্টরিংকে সম্ভব করে তোলে তবে কেন এটি ব্যবহার করছেন না?
কোন অভিজ্ঞতা?
হ্যাঁ, একটি বিশাল সমাধানের জন্য আপনার আগের চেয়ে আরও একটি ত্রুটি-প্রবণ এবং রিফ্যাক্টরিং-প্রতিকূল সমাধান প্রয়োজন (যেমন হয় কোনও প্রকার নিরাপদ আইওসি ধারক বা ভাল আইডিই সমর্থন দ্বারা)।
আমি প্রায়শই আমার পরীক্ষাগুলিতে আইওসি ধারক ব্যবহার করি। মঞ্জুর, তারা খাঁটি অর্থে "ইউনিট পরীক্ষা" নয়। আইএমও তারা আরও বিডিডিশ এবং রিফ্যাক্টরিংয়ের সুবিধার্থে। পরীক্ষাগুলি আপনাকে রিফ্যাক্টরের আত্মবিশ্বাস দেওয়ার জন্য রয়েছে। স্বল্প লিখিত পরীক্ষাগুলি আপনার কোডে সিমেন্ট ingালার মতো হতে পারে।
নিম্নোক্ত বিবেচনা কর:
[TestFixture]
public class ImageGalleryFixture : ContainerWiredFixture
{
[Test]
public void Should_save_image()
{
container.ConfigureMockFor<IFileRepository>()
.Setup(r => r.Create(It.IsAny<IFile>()))
.Verifiable();
AddToGallery(new RequestWithRealFile());
container.VerifyMockFor<IFileRepository>();
}
private void AddToGallery(AddBusinessImage request)
{
container.Resolve<BusinessPublisher>().Consume(request);
}
}
গ্যালারীটিতে একটি চিত্র যুক্ত করার সময় এমন অনেকগুলি ঘটনা ঘটে। চিত্রটি পুনরায় আকার দেওয়া হয়েছে, একটি থাম্বনেইল তৈরি করা হয়েছে এবং ফাইলগুলি অ্যামাজনএস 3 এ সংরক্ষণ করা হয়েছে। একটি ধারক ব্যবহার করে আমি কেবলমাত্র আমি যে আচরণটি পরীক্ষা করতে চাই তা আরও সহজেই বিচ্ছিন্ন করতে পারি, যা এই ক্ষেত্রে স্থায়ী অংশ।
এই কৌশলটি ব্যবহার করার সময় একটি অটো-মকিং কনটেইনার এক্সটেনশান কাজে আসে: http://www.agileatwork.com/auto-mocking-unity-container-extension/
সিম্পল ইনজেক্টর , ড্রাইওক (এটির খনি) এর মতো অনিবন্ধিত / অজানা পরিষেবাগুলি সমাধান করার ক্ষমতা সম্পন্ন পাত্রে ব্যবহার করা এখনও কার্যকর হয়নি এমন ইন্টারফেসের জন্য উপহাসগুলি ফিরিয়ে দিতে পারে।
যার অর্থ আপনি প্রথম সাধারণ বাস্তবায়ন এবং এর উপহাস নির্ভরতা দিয়ে বিকাশ শুরু করতে পারেন এবং আপনার অগ্রগতির সাথে এগুলি বাস্তব জিনিস দিয়ে প্রতিস্থাপন করতে পারেন।