মক ফ্রেমওয়ার্ক বনাম এমএস নকল ফ্রেমওয়ার্ক


99

এনএমক বনাম ভিএস ২০১১ নকল ফ্রেমওয়ার্কের মতো মক ফ্রেমওয়ার্কগুলির পার্থক্য সম্পর্কে কিছুটা বিভ্রান্ত। এমএসডিএন দিয়ে যাচ্ছি, আমি যা বুঝতে পেরেছি তা হ'ল নকল আপনাকে রাইনোমক বা এনএমকের মতো আপনার নির্ভরতাগুলি উপহাস করার অনুমতি দেয়, তবে পদ্ধতির ভিন্নতা রয়েছে, ফ্যাক্স এই কার্যকারিতাটি অর্জন করার জন্য কোড উত্পন্ন করে তবে মকস কাঠামোটি তা দেয় না। তাহলে কি আমার বোঝাপড়াটি সঠিক? ইজ নকল মাত্র অন্য মক কাঠামো

উত্তর:


189

আপনার প্রশ্নটি ছিল এমএস নকলের কাঠামোটি এনএমকের থেকে কীভাবে আলাদা এবং এটি অন্যান্য উত্তরগুলির মধ্যে কিছু সমাধান করেছে তা উপস্থিত রয়েছে, তবে তারা কীভাবে একই এবং সেগুলি কীভাবে আলাদা সে সম্পর্কে আরও কিছু তথ্য এখানে। এনমক রাইনোমকস এবং মকের সাথেও সমান, তাই আমি তাদের এনএমকের সাথে ভাগ করে নিচ্ছি।

এনএমক / রাইনোমকস / মোক এবং এমএস নকল ফ্রেমওয়ার্কের মধ্যে আমি সরাসরি 3 টি প্রধান পার্থক্য দেখতে পাচ্ছি:

  • এমএস নকল কাঠামোটি জেনেরিক ধরণের পরিবর্তে ভিজ্যুয়াল স্টুডিওর পূর্ববর্তী সংস্করণগুলিতে অ্যাকসেসরের মতো উত্পন্ন কোড ব্যবহার করে। আপনি যখন নির্ভরতার জন্য নকল কাঠামোটি ব্যবহার করতে চান, আপনি পরীক্ষার প্রকল্পের রেফারেন্সগুলির সাথে নির্ভরশীলতা সম্বলিত সমাবেশটি যুক্ত করুন এবং তারপরে টেস্টের দ্বিগুণ (স্টাবস বা শিমস) জেনারেট করতে ডান ক্লিক করুন click তারপরে আপনি যখন পরীক্ষা করছেন, আপনি আসলে পরিবর্তে এই উত্পন্ন ক্লাসগুলি ব্যবহার করছেন। এনমক একই জিনিসটি (যেমন IStudentRepository studentRepository = mocks.NewMock<IStudentRepository>()) সম্পাদন করতে জেনেরিক ব্যবহার করে । আমার মতে, এমএস ফেকস ফ্রেমওয়ার্ক পদ্ধতির পরীক্ষাগুলি থেকে কোড নেভিগেশন এবং রিফ্যাক্টরিংকে বাধা দেয় কারণ আপনি প্রকৃত ইন্টারফেসের পরিবর্তে না বরং উত্পন্ন শ্রেণীর বিরুদ্ধে কাজ করছেন।

  • মাইক্রোসফট ফ্রেমওয়ার্ক সরবরাহ নিবন্ধসমূহ এবং মাপ (শিম্স), যেহেতু NMock, RhinoMocks এবং MOQ সব নিবন্ধসমূহ এবং প্রদান fakes ঠাট্টা । আমি এমএসের বিদ্রূপগুলি অন্তর্ভুক্ত না করার সিদ্ধান্তটি সত্যই বুঝতে পারি না এবং আমি নীচে বর্ণিত কারণে ব্যক্তিগতভাবে মোলের ভক্ত নই।

  • এমএস নকল কাঠামোর সাহায্যে আপনি যে পদ্ধতিগুলিতে স্টাব করতে চান তার বিকল্প বাস্তবায়ন সরবরাহ করেন। এই বিকল্প বাস্তবায়নের মধ্যে, আপনি রিটার্ন মানগুলি নির্দিষ্ট করতে পারেন এবং পদ্ধতিটি কীভাবে ডাকা হয়েছিল বা কীভাবে তা সম্পর্কে তথ্য ট্র্যাক করতে পারেন। এনমক, রাইনোমকস এবং মোকের সাহায্যে আপনি একটি মক অবজেক্ট তৈরি করেন এবং তারপরে স্ট্যাবড রিটার্ন মানগুলি নির্দিষ্ট করার জন্য বা মিথস্ক্রিয়াগুলি (কীভাবে পদ্ধতিগুলি বলা হয়েছিল এবং কীভাবে) ট্র্যাক করতে ব্যবহার করুন। আমি এমএস নকলগুলি আরও জটিল এবং কম ভাবপূর্ণ বলে মনে করি।

ফ্রেমওয়ার্কগুলি কী সরবরাহ করে তার মধ্যে পার্থক্যটি স্পষ্ট করতে: এনমক, রাইনোমকস এবং মক সকলে দুটি ধরণের টেস্ট ডাবল (স্টাবস এবং মকস) সরবরাহ করে। জাল কাঠামো স্টাব এবং মোল সরবরাহ করে (তারা এগুলিকে শিম বলে) এবং দুর্ভাগ্যক্রমে মককে অন্তর্ভুক্ত করে না। এনএমক এবং এমএস ফেকসের মধ্যে পার্থক্য এবং সাদৃশ্য বুঝতে, এই বিভিন্ন ধরণের পরীক্ষার দ্বিগুণ কী তা বোঝা সহায়ক:

স্টাবস: স্ট্যাবগুলি তখন ব্যবহার করা হয় যখন আপনাকে কোনও পদ্ধতি বা বৈশিষ্ট্যের জন্য কোনও মান সরবরাহ করতে হয় যা পরীক্ষার অধীনে পদ্ধতিতে আপনার পরীক্ষার দ্বিগুণ সম্পর্কে জিজ্ঞাসা করা হবে। উদাহরণস্বরূপ, যখন পরীক্ষার অধীনে আমার পদ্ধতিটি IStudentRepository পরীক্ষাটির doStudentExist () পদ্ধতি ডাবল করে, আমি চাই এটি সত্যে ফিরে আসুক।

এনমক এবং এমএস জালিয়াতির স্টাবগুলির ধারণাটি একই, তবে এনমকের সাথে আপনি এই জাতীয় কিছু করবেন:

Stub.On(mockStudentRepository).Method("DoesStudentExist").Will(Return.Value(true));

এবং এমএসফেকসের সাহায্যে আপনি কিছুটা এইভাবে করবেন:

IStudentRepository studentRepository = new DataAccess.Fakes.StubIStudentRepository() // Generated by Fakes.
{
    DoesStudentExistInt32 = (studentId) => { return new Student(); }
};

এমএস নকলের বিজ্ঞপ্তিতে আপনি নোটস স্টুডেন্টএক্সজিস্ট পদ্ধতির জন্য সম্পূর্ণ নতুন বাস্তবায়ন তৈরি করেছেন (নোট করুন যে এটি ডাসস্টুডেন্টএক্সজিস্ট ইন্ট 32 বলে কারণ নকল কাঠামোটি স্ট্রেড অবজেক্টস উত্পন্ন করার সময় পদ্ধতির নামগুলিতে প্যারামিটার ডেটা টাইপগুলিকে সংযোজন করে, আমি মনে করি এটি স্পষ্ট করে দেয়) পরীক্ষাগুলো). সত্যি কথা বলতে NMock বাস্তবায়নও আমাকে বাগ দেয় কারণ এটি পদ্ধতির নাম সনাক্ত করতে একটি স্ট্রিং ব্যবহার করে। (এনএমক ব্যবহারের উদ্দেশ্যে কীভাবে আমি ভুল বুঝেছি তা যদি আমাকে ক্ষমা করুন This) এই পদ্ধতিটি সত্যই রিফ্যাক্টরিংয়ে বাধা দেয় এবং আমি এই কারণে এনমকের উপরে রাইনোমকস বা মককে অত্যন্ত সুপারিশ করব।

মোকস: পরীক্ষার অধীনে আপনার পদ্ধতি এবং এর নির্ভরতাগুলির মধ্যে পারস্পরিক মিথস্ক্রিয়া যাচাই করতে মক ব্যবহার করা হয়। এনমকের সাথে, আপনি এটির মতো প্রত্যাশা সেট করে এটি করেন:

Expect.Once.On(mockStudentRepository).Method("Find").With(123);

এই কারণেই আমি এনএমকে রাইনোমকস এবং মককে প্রাধান্য দিই, এনএমক পুরানো প্রত্যাশা শৈলী ব্যবহার করে যেখানে রাইনোমকস এবং মোক উভয়ই সাজানো / আইন / সংস্থান পদ্ধতির সমর্থন করে যেখানে আপনি পরীক্ষার শেষে যেমন প্রত্যাশিত মিথস্ক্রিয়াগুলি নির্দিষ্ট করেছেন :

stubStudentRepository.AssertWasCalled( x => x.Find(123));

আবার, নোট করুন যে রাইনোমকস পদ্ধতিটি সনাক্ত করতে স্ট্রিংয়ের পরিবর্তে ল্যাম্বডা ব্যবহার করে। এমএস নকল কাঠামো মোটেও মক সরবরাহ করে না। এর অর্থ হল যে আপনার স্ট্যাবড বাস্তবায়নগুলিতে (উপরের স্টাবগুলির বিবরণ দেখুন) আপনাকে ভেরিয়েবল সেট করতে হবে যা আপনি পরে যাচাই করেছেন তা সঠিকভাবে সেট করা হয়েছিল। এটি দেখতে এরকম কিছু দেখাবে:

bool wasFindCalled = false;

IStudentRepository studentRepository = new DataAccess.Fakes.StubIStudentRepository() 
{
    DoesStudentExistInt32 = (studentId) => 
        { 
            wasFindCalled = true;
            return new Student(); 
        }
};

classUnderTest.MethodUnderTest();

Assert.IsTrue(wasFindCalled);

আপনার এই স্ট্রোকটিতে কল আপ ট্র্যাক করতে হবে এবং পরে পরীক্ষায় এটি দৃ .়ভাবে জানাতে হবে বলে আমি এই পদ্ধতিকে কিছুটা বিশৃঙ্খলাবদ্ধ বলে মনে করি। আমি NMock এবং বিশেষত রাইনোমকস উদাহরণগুলি আরও অভিব্যক্তিপূর্ণ বলে মনে করি।

মোলস (শিমস): স্পষ্ট বলতে গেলে, আমি মোলগুলি পছন্দ করি না, কারণ তাদের অপব্যবহারের সম্ভাবনা রয়েছে। ইউনিট টেস্টিং (এবং বিশেষত টিডিডি) সম্পর্কে আমি যে জিনিসগুলি পছন্দ করি তার মধ্যে একটি হ'ল আপনার কোডটি পরীক্ষা করা আপনাকে বুঝতে পারে যে আপনি কোথায় দুর্বল কোড লিখেছেন। এর কারণ, খারাপভাবে লিখিত কোড পরীক্ষা করা কঠিন। মোলগুলি ব্যবহার করার সময় এটি সত্য নয় কারণ মোলগুলি আসলে আপনাকে ইঞ্জেকশনযুক্ত নয় এমন নির্ভরতাগুলির বিরুদ্ধে পরীক্ষা করতে বা ব্যক্তিগত পদ্ধতি পরীক্ষা করার জন্য ডিজাইন করা হয়। এগুলি স্টাবগুলির মতো একইভাবে কাজ করে, আপনি এই জাতীয় শিমস কনটেক্সট ব্যবহার ব্যতীত:

using (ShimsContext.Create())
{
    System.Fakes.ShimDateTime.NowGet = () => { return new DateTime(fixedYear, 1, 1); };
}

শিমসের সাথে আমার উদ্বেগ হ'ল লোকেরা তাদের "ইউনিট পরীক্ষার সহজ উপায়" হিসাবে দেখা শুরু করবে কারণ এটি আপনাকে কোডটি যেমন লিখতে বাধ্য করে না তেমনভাবে। এই ধারণাটি সম্পর্কে আরও সম্পূর্ণ লেখার জন্য আমার এই পোস্টটি দেখুন:

জাল ফ্রেমওয়ার্ক সম্পর্কিত কিছু উদ্বেগ সম্পর্কিত আরও তথ্যের জন্য এই পোস্টগুলি একবার দেখুন:

যদি আপনি রাইনোমকস শিখতে আগ্রহী হন তবে এখানে একটি বহুবর্ণ প্রশিক্ষণের ভিডিও রয়েছে (সম্পূর্ণ প্রকাশ - আমি এই কোর্সটি লিখেছি এবং দর্শনের জন্য বেতন প্রদান করেছি, তবে আমার মনে হয় এটি এই আলোচনায় প্রযোজ্য তাই আমি এটিকে এখানে অন্তর্ভুক্ত করছি):


14
@ জিম আমি একমত নই যে একজনকে "ইনজেকশন নয় এমন নির্ভরতার বিরুদ্ধে পরীক্ষা করার" অনুমতি দেওয়া খারাপ জিনিস। বিপরীতে, বাস্তবে, এই ক্ষমতা প্রচুর অর্থহীন ইন্টারফেস এবং সম্পর্কিত "অবজেক্ট ওয়্যারিং" কনফিগারেশন / জটিলতা সহ একটি কোডবেসকে বিশৃঙ্খলা এড়াতে সহায়তা করে। আমি ইতিমধ্যে কয়েকটি প্রকল্প দেখেছি (জাভা এবং। নেট উভয়) যা কেবলমাত্র একটি একক বাস্তবায়নকারী ক্লাস সহ শত শত জাভা / সি # ইন্টারফেস এবং প্রচুর অকেজো এক্সএমএল কনফিগারেশন (স্প্রিং ডিআই মটরশুটি জন্য, বা এমএস ইউনিটির ওয়েবকনফিগে) রয়েছে ফ্রেমওয়ার্ক)। এই ধরনের নির্ভরতা ভাল ইনজেকশনের হয় না
রোগেরিও

19
@ রোজারিও, আমি এই মডেলটি অনুসরণ করে এমন হাজার হাজার ক্লাসের সাথে একাধিক প্রকল্পে কাজ করেছি এবং যখন নির্ভরতা ইঞ্জেকশনটি সঠিকভাবে করা হয় (যদি আপনি এক্সএমএল কনফিগারেশন ব্যবহার করেন তবে আপনি এটি সঠিকভাবে করছেন না, তবে) এটি সহজ এবং তুলনামূলক ব্যথাহীন। অন্যদিকে, আমি এমন সিস্টেমে কাজ করেছি যেগুলি এটি করে না এবং ক্লাসগুলির মধ্যে সংযোগ সবসময়ই আমাকে উল্লেখযোগ্য ব্যথা করে। নির্ভরতা ইনজেকশন ব্যবহারের জন্য টেস্টিং কারণ নয় (যদিও এটি কোনও খারাপ কারণ নয়)। আসল কারণটি আলগা দম্পতি। একটি একক শ্রেণীর দ্বারা প্রয়োগ করা ইন্টারফেস থাকা আমার কখনই ব্যথার কারণ হয় নি।
জিম কুপার

17
@ জিম, আমি দুর্দান্ত প্লাস হিসাবে খারাপ ডিজাইনের পরীক্ষা করার ক্ষমতা দেখছি। উত্তম ডিজাইনের দিকে লিগ্যাসি কোডটি রিফ্যাক্টর করার আগে আপনি প্রথমে যা করতে চান তা হ'ল পরীক্ষা write
থমাস মাতেনা

4
আমার নিয়মটি হ'ল আমি নকলগুলি কেবল তখনই ব্যবহার করি যখন আমার কোনও শেয়ার / স্থিত পদ্ধতি বা এমন একটি শ্রেণীর শিম করতে হবে যা আমার কাছে কোনও ইন্টারফেস বাস্তবায়নের অ্যাক্সেস নেই। অন্য সব কিছুর জন্য আমি মোক ব্যবহার করি। জালগুলি ধীরে ধীরে (কারণ ভুয়া সমাবেশগুলি তৈরি করা দরকার), এবং আপনি মোক এর সাথে প্রাপ্ত কার্যকারিতাটি মেলে তুলতে আরও কোডিং প্রচেষ্টা লাগে।
নিক

4
@ কার্লোভ.ড্যাঙ্গো সবার আগে, আমি পুরোপুরিভাবে জানি যে নির্ভরতা ইনজেকশনটির পৃথক ইন্টারফেসের প্রয়োজন হয় না ; আমার পূর্ববর্তী মন্তব্যটি ডিআই ব্যবহার করার সময় এই জাতীয় ইন্টারফেস তৈরি করার প্রবণতাটির ইঙ্গিত দিচ্ছিল। দ্বিতীয়ত, "আইওসি" (নিয়ন্ত্রণের বিপরীতে) এর কোনও যোগসূত্র নেই ! (প্রথমটি পদ্ধতিগুলির মধ্যে নিয়ন্ত্রণের প্রবাহকে উল্টে ফেলা সম্পর্কে , দ্বিতীয়টি কোনও উপাদান / অবজেক্টের জন্য নির্ভরতা সমাধানের বিষয়ে)) আইওসি এবং ডিআই কে বিভ্রান্ত করে, আপনি আমাকে অজ্ঞতা প্রদর্শন করছেন; এবং সত্যই, এই সাইটটি অন্যদের অপমান করার লোকেদের প্রাপ্য নয়, সুতরাং দয়া করে এটিকে নাগরিক রাখতে দিন।
রোগিরিও

23

আপনি সঠিক, তবে গল্পের আরও কিছু আছে। এই উত্তরটি থেকে সরিয়ে নেওয়া সবচেয়ে গুরুত্বপূর্ণ বিষয়গুলি হ'ল:

  1. আপনার আর্কিটেকচারে জাল এবং উপহাসের ক্র্যাচের উপর নির্ভর করার পরিবর্তে স্টাব এবং নির্ভরতা ইনজেকশনটির যথাযথ ব্যবহার করা উচিত

  2. আপনার যা পরিবর্তন করা উচিত নয় বা বদলাতে হবে না তা পরীক্ষার কোডগুলির জন্য জাল এবং উপহাসগুলি কার্যকর, যেমন:

    • উত্তরাধিকারের কোড যা স্টাবগুলির ব্যবহার (বা দক্ষ ব্যবহার) করে না
    • তৃতীয় পক্ষের এপিআই
    • যে সংস্থানগুলির জন্য আপনার কোনও উত্স কোড নেই

শিমস ("মোলস" নামে পরিচিত, বিকাশের সময়) আসলে একটি মশকরা কাঠামো যা ডিটোরিং কলগুলির মাধ্যমে পরিচালিত হয়। কঠোর পরিশ্রমের সাথে একটি মোক তৈরির পরিবর্তে (হ্যাঁ, এমনকি মাক ব্যবহার করাও তুলনামূলকভাবে বেদনাদায়ক!), শিমগুলি ইতিমধ্যে স্থানে থাকা প্রোডাকশন কোড অবজেক্টটি ব্যবহার করে। শিমগুলি কেবল উত্পাদন লক্ষ্য থেকে পরীক্ষার প্রতিনিধিকে কলটি পুনরায় রুট করে।

লক্ষ্য প্রকল্পের ইন্টারফেস থেকে স্টাবগুলি উত্পন্ন হয়। স্টাব অবজেক্টটি ঠিক এটি - ইন্টারফেসের একটি বাস্তবায়ন। স্টাব প্রকারটি ব্যবহারের উপকারিতা হ'ল আপনি একবারে বহুবার ব্যবহারের স্টাব ব্যবহার করে নিজের পরীক্ষার প্রকল্পটি গুঁড়িয়ে না দিয়ে দ্রুত স্টাব তৈরি করতে পারেন, এটি তৈরির সময় নষ্ট করার কথা উল্লেখ না করে। অবশ্যই, আপনার এখনও অনেক পরীক্ষার জুড়ে ব্যবহারের জন্য কংক্রিট স্টাব তৈরি করা উচিত।

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


11
ভুয়া সম্পর্কে আপনার মন্তব্যে নির্দিষ্টকরণের অভাব এবং কিছু পরিভাষা সম্পর্কিত সমস্যার ভিত্তিতে ডাউনভোটেড। নকল হ'ল সকল ধরণের পরীক্ষার দ্বিগুণের জন্য একটি সাধারণ শব্দ এবং তাদের নকল লাইব্রেরির জন্য এমএস নামও ব্যবহৃত হয়। তাদের লাইব্রেরিতে কেবল শিমগুলি আসলে মোলস, স্টাবগুলি হয় না। উদাহরণগুলির প্রয়োজনীয়তার বিষয়ে, আমি আপনার উত্তরে একটি উদাহরণ দেখতে চাই যা দেখায় যে কীভাবে ফেকসের সাথে শিম (বা স্টাব) তৈরি করা হয় মক ব্যবহারের চেয়ে সহজ। এগুলি সমাধান করার জন্য আপনি যদি আপনার উত্তরে পরিবর্তন করেন তবে আমি আমার ডাউনটাতে পরিবর্তন করব।
জিম কুপার

4
তবে শিমস (মোলস), অর্থাৎ তৃতীয় পক্ষের কোড, সিস্টেম / এসডিকে এপিআই ব্যবহারের উপযুক্ত যুক্তি যুক্ত করে। আপনি যখন নিজের অভ্যন্তরীণ সমাধানগুলির সাথে কাজ করছেন তখন এটি কেবল নয়। সুতরাং আমি আপনার কাছে একটি ভোট দিয়েছি :-)
টনি ওয়াল

4
@ মাইক এবং জিম .. আমি এই উত্তরে ব্যবহৃত পরিভাষা সংশোধন করার চেষ্টা করেছি। যদি আমরা এটি আরও ভাল করতে পারি তবে দয়া করে আমাকে জানান। ধন্যবাদ
9:39 এ স্নেশ

14

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

ফেকসের শিম বৈশিষ্ট্যটি সত্যই সত্যই কার্যকর। অবশ্যই, বিপদ আছে। আপনি কেবল এটি যেখানে প্রয়োজন সেখানে এটি ব্যবহার করতে কিছুটা শৃঙ্খলা লাগে। তবে এটি একটি বড় ব্যবধান পূরণ করে। আমার মূল অভিযোগটি হ'ল এটি কেবল ভিএস 2012 এর চূড়ান্ত সংস্করণে সরবরাহ করা হয়েছে এবং তাই কেবলমাত্র নেট নেটওয়ার্কের সম্প্রদায়ের উপধারাতে উপলব্ধ। কি করুণা।


4
জাল ফ্রেমওয়ার্ক প্রিমিয়াম সংস্করণের পাশাপাশি উপলব্ধ।
সর্বদাআপনি প্রোগ্রামটি

13

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

ফেকস দ্বারা প্রদত্ত অন্যান্য শ্রেণীর অবজেক্ট, "শিম" নামে পরিচিত, এটি নির্ভরশীলতার আচরণ প্রতিস্থাপনের জন্য এমন একটি প্রক্রিয়া প্রকাশ করে যা মকসের মাধ্যমে মানক প্রতিস্থাপনের জন্য পর্যাপ্ত পরিমাণে decoupled হয়নি (বা হতে পারে না)। আফাইক, টাইপমক হ'ল অন্যতম প্রধান বিদ্রূপমূলক ফ্রেমওয়ার্ক যা বর্তমানে এই ধরণের কার্যকারিতা সরবরাহ করে।

বিটিডাব্লু, আপনি যদি আগে মোলগুলি ব্যবহার করে দেখে থাকেন তবে জালগুলি মূলত একই জিনিস, অবশেষে মাইক্রোসফ্ট রিসার্চ থেকে বেরিয়ে আসল পণ্যটিতে প্রবেশের পথ তৈরি করে।


4
আপডেট: মোলগুলি এখন এমএস জালিতে সংহত করা হয়েছে। "ভিজ্যুয়াল স্টুডিও ২০১২ সালে দ্য ফেকস ফ্রেমওয়ার্কটি মোলস এবং স্টাবসের পরবর্তী প্রজন্ম is নকলগুলি মোল থেকে আলাদা, তবে মোলস থেকে নকলে যেতে আপনার কোডে কিছু পরিবর্তন প্রয়োজন require মজ ফ্রেমওয়ার্কটি ভিজ্যুয়াল স্টুডিও ২০১২ তে সমর্থন করবে না " উত্স: research.microsoft.com/en-us/projects/moles
হুজুর

1

ভুয়া (শিম + স্টাব) অবজেক্ট সম্পর্কে, এটি উপরে বর্ণিত হয়েছে ভাল, যদিও আমি শেষ মন্তব্যে শেষ অনুচ্ছেদে পুরো পরিস্থিতিটি পুরোপুরি সংক্ষিপ্তভাবে বর্ণনা করেছি।

যদিও অনেক লোক যুক্তি দেখিয়েছেন যে জাল (শিম + স্টাব) অবজেক্টগুলি কোনও কোনও ইউনিট পরীক্ষার ক্ষেত্রে ভাল সম্পদ হিসাবে বিবেচিত হয়, তবে ক্ষতিটি হ'ল আপনি ভিজুয়াল স্টুডিও 2012 বা ভিজ্যুয়াল স্টুডিও 2013 ব্যবহার করছেন না কেন, এই বিকল্পগুলি কেবলমাত্র উপলভ্য প্রিমিয়াম বা আলটিমেট সংস্করণ সহ। আইওডাব্লু, এর অর্থ এই যে আপনি কোনও প্রো সংস্করণে those ফেক (শিম + স্টাব )গুলির কোনওটি চালাতে পারবেন না।

আপনি সম্ভবত প্রো সংস্করণগুলিতে জাল (শিম + স্টাব) মেনু অপশনটি দেখতে পাচ্ছেন, তবে সাবধান থাকুন, এমন বেশ কয়েকটি দৃ strong় সম্ভাবনা রয়েছে যা আপনি একেবারেই শেষ করবেন না ... এটি আপনাকে কোনও গুরুত্বপূর্ণ কিছু বলার সংকলন ত্রুটি তৈরি করবে না অনুপস্থিত, বিকল্পগুলি কেবল সেখানে নেই, তাই আপনার সময় নষ্ট করবেন না ...

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


4
আপনার প্রশ্নটি ছোট অনুচ্ছেদে ফর্ম্যাট করুন যাতে এটি পড়া সহজ।

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