ইউনিট পরীক্ষার জন্য আইওসি ব্যবহার করে


97

ইউনিট পরীক্ষার জন্য কীভাবে আইওসি কনটেইনার ব্যবহার করা যেতে পারে? আইওসি ব্যবহার করে কোনও বিশাল সমাধান (50+ প্রকল্প) মকগুলি পরিচালনা করা কি কার্যকর? কোন অভিজ্ঞতা? কোন সি # লাইব্রেরি যা ইউনিট পরীক্ষায় এটি ব্যবহারের জন্য ভাল কাজ করে?


7
@ মার্ক সিমেন এটি উল্লেখ করার পক্ষে খুব নম্র হবে, তবে আপনি যদি এই প্রশ্নে আগ্রহী হন তবে আপনার কমপক্ষে অটো
রুবেন বার্টেলিংক

4
আছে: মিগুয়েল কাস্ত্রো দ্বি এবং Vimeo উপর উপহাস মধ্যে সম্পর্ক সম্পর্কে একটি ভাল আলাপ এর vimeo.com/68390510
GregC

উত্তর:


131

সাধারণভাবে বলতে গেলে, ডিআইডি পাত্রে ইউনিট পরীক্ষার জন্য প্রয়োজনীয় হওয়া উচিত নয় কারণ ইউনিট টেস্টিংয়ের জন্য দায়িত্ব পৃথক করা।

কনস্ট্রাক্টর ইঞ্জেকশন ব্যবহার করে এমন একটি ক্লাস বিবেচনা করুন

public MyClass(IMyDependency dep) { }

আপনার সম্পূর্ণ প্রয়োগে, এটি এমন হতে পারে যে পিছনে একটি বিশাল নির্ভরশীলতা গ্রাফটি লুকিয়ে রয়েছে IMyDependencyতবে একটি ইউনিট পরীক্ষায়, আপনি এটিকে সমস্ত একক টেস্টের দ্বিগুণ করে নিন

টেস্ট দ্বিগুণ উৎপন্ন করতে আপনি মোখ বা গণ্ডারগড়ির মতো গতিশীল মোকস ব্যবহার করতে পারেন, তবে এটির প্রয়োজন নেই।

var dep = new Mock<IMyDependency>().Object;
var sut = new MyClass(dep);

কিছু ক্ষেত্রে, একটি অটো-বিদ্রূপকারী ধারকটি রাখা ভাল হতে পারে, তবে আপনাকে সেই ডিআই কনটেইনার ব্যবহার করার দরকার নেই যা উত্পাদন অ্যাপ্লিকেশন ব্যবহার করে।


13
সম্মত হন ... যদি না কোনও পরীক্ষার টার্গেটের নির্ভরতা হিসাবে আইওসি ধারক না থাকে, আপনার পরীক্ষাগুলি তাদের প্রয়োজন হবে না ... আপনি যখন নিজের ইউনিট পরীক্ষা করবেন তখন আপনি বেশিরভাগ অবজেক্ট গ্রাফ সরিয়ে ফেলবেন ।
অ্যান্ডারসন আইমস

4
@ মার্ক সিমেন এটি বোঝা যায় ... তবে ইন্টিগ্রেশন পরীক্ষার কী হবে? উদাহরণস্বরূপ, আমি ইউআই পরীক্ষার সাথে চারপাশে খেলেছি এবং যখন আমাকে কম্পোজিশনের মূলটি ভাগ করতে হয়েছিল তখন আমি পরিস্থিতির মুখোমুখি হয়েছি। কোন মন্তব্য?
আরনিস ল্যাপসা

4
@ অ্যারনিস এল .: সংহত পরীক্ষার জন্য এটি কম গুরুত্বপূর্ণ। উপাদানগুলি ওয়্যার আপ করতে আপনি একটি ডিআই কনটেইনার ব্যবহার করতে পারেন, তবে যদি তা হয় তবে সম্পূর্ণ অ্যাপ্লিকেশনটির চেয়ে আপনার পাত্রে আলাদা কনফিগারেশন লাগবে - যদি না আপনি সাবকিউনেসিয়াস পরীক্ষা বা একটি সম্পূর্ণ সিস্টেম পরীক্ষা না করেন তবে এই ক্ষেত্রে আপনি ধারকটির অ্যাপ্লিকেশনটির কনফিগারেশনটি পুনরায় ব্যবহার করতে পারেন।
মার্ক সিমেন

এমএসডিএন ম্যাগাজিন টেস্ট ডাবল রেফ করুন: download.microsoft.com/download/3/A/7/…
এম হাসান

18

ইউনিট পরীক্ষার জন্য আইওসি কনটেইনার কীভাবে ব্যবহার করা যেতে পারে?

আইওসি প্রোগ্রামিং প্যারাডিমগুলি প্রয়োগ করবে যা ইউনিট টেস্টিংকে বিচ্ছিন্নকরণে (অর্থাত্ মোক ব্যবহার করা) সহজ করে তুলবে: ইন্টারফেসের ব্যবহার, কোনও নতুন (), কোনও সিলেটলেট ...

তবে পরীক্ষার জন্য আইওসি পাত্রে ব্যবহার করা সত্যই প্রয়োজন হয় না, এটি কেবল কিছু সুবিধা সরবরাহ করবে যেমন মক এর ইনজেকশন তবে আপনি নিজে এটি করতে পারেন।

আইওসি ব্যবহার করে কোনও বিশাল সমাধান (50+ প্রকল্প) মকগুলি পরিচালনা করা কি কার্যকর?

আমি নিশ্চিত নই যে আপনি আইওসি ব্যবহার করে বিদ্রূপ পরিচালনা করার অর্থ কী। যাইহোক, আইওসি পাত্রে সাধারণত পরীক্ষার ক্ষেত্রে মক ইঞ্জেকশন করা ছাড়াও আরও অনেক কিছু করা যায়। এবং যদি আপনার কাছে শালীন আইডিই সমর্থন থাকে যা রিফ্যাক্টরিংকে সম্ভব করে তোলে তবে কেন এটি ব্যবহার করছেন না?

কোন অভিজ্ঞতা?

হ্যাঁ, একটি বিশাল সমাধানের জন্য আপনার আগের চেয়ে আরও একটি ত্রুটি-প্রবণ এবং রিফ্যাক্টরিং-প্রতিকূল সমাধান প্রয়োজন (যেমন হয় কোনও প্রকার নিরাপদ আইওসি ধারক বা ভাল আইডিই সমর্থন দ্বারা)।


17

আমি প্রায়শই আমার পরীক্ষাগুলিতে আইওসি ধারক ব্যবহার করি। মঞ্জুর, তারা খাঁটি অর্থে "ইউনিট পরীক্ষা" নয়। আইএমও তারা আরও বিডিডিশ এবং রিফ্যাক্টরিংয়ের সুবিধার্থে। পরীক্ষাগুলি আপনাকে রিফ্যাক্টরের আত্মবিশ্বাস দেওয়ার জন্য রয়েছে। স্বল্প লিখিত পরীক্ষাগুলি আপনার কোডে সিমেন্ট 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/


8
"আপনার কোডে সিমেন্ট ingালার মতো" এই বাক্যাংশটির জন্য +1। আমি সব সময় এটি ব্যবহার শুরু করেছি।
অ্যান্ড্রু শেফার্ড

2

সিম্পল ইনজেক্টর , ড্রাইওক (এটির খনি) এর মতো অনিবন্ধিত / অজানা পরিষেবাগুলি সমাধান করার ক্ষমতা সম্পন্ন পাত্রে ব্যবহার করা এখনও কার্যকর হয়নি এমন ইন্টারফেসের জন্য উপহাসগুলি ফিরিয়ে দিতে পারে।

যার অর্থ আপনি প্রথম সাধারণ বাস্তবায়ন এবং এর উপহাস নির্ভরতা দিয়ে বিকাশ শুরু করতে পারেন এবং আপনার অগ্রগতির সাথে এগুলি বাস্তব জিনিস দিয়ে প্রতিস্থাপন করতে পারেন।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.