পরীক্ষার জন্য প্রাইভেট সেটটার সহ স্টাবিং প্রোপার্টি


10

আমাদের উদ্দেশ্য আছে

public class MyObject{
    protected MyObject(){}

    public string Property1 {get;private set;}
    public string Property2 {get;private set;}
    public string Property3 {get;private set;}
    public string Property4 {get;private set;}
    public string Property5 {get;private set;}
    public string Property6 {get;private set;}
    public string Property7 {get;private set;}
    public string Property8 {get;private set;}
    public string Property9 {get;private set;}
    public string Property10 {get;private set;}
}

আমাদের প্রোডাকশন কোডে আমরা এই বিষয়টিকে অটোম্যাপারের মাধ্যমে পপুলেট করি। এটি বৈশিষ্ট্যগুলি অ্যাক্সেস করতে পারে এবং সেগুলি সঠিকভাবে সেট করতে পারে।

এখন আমরা যখন এই ক্লাসটি ভবিষ্যতের পাইপলাইনে পরীক্ষা করতে চাই তখন ডামি মান সহ বৈশিষ্ট্যগুলি স্থাপন করা সম্ভব হয় না (বিপরীতে পরীক্ষা করা যায়)।

কয়েকটি বিকল্প উপলব্ধ।

  • পরীক্ষার জন্য প্রয়োজনীয় প্যারামিটারগুলি গ্রহণ এবং বৈশিষ্ট্য নির্ধারণের জন্য কাস্টম কনস্ট্রাক্টররা বর্তমানে 3 কনস্ট্রাক্টর প্রয়োজন। এটি পরিষ্কার নয় যেহেতু নির্মাতারা কোনও ব্যবসায়ের কার্যকারিতা সরবরাহ করে না।

  • বৈশিষ্ট্যগুলিকে ভার্চুয়াল করুন যাতে শ্রেণিটি স্টাবড হতে পারে। তবে বৈশিষ্ট্যগুলি ভার্চুয়াল চিহ্নিত করে কোনও ব্যবসায়িক মূল্য সরবরাহ করে না এবং আমার শ্রেণিকে দূষিত করে।

  • অভ্যন্তরীণভাবে বস্তুটি নির্মাণ করতে শ্রেণীর সাথে একটি অবজেক্ট বিল্ডার যুক্ত করুন। আবার কোনও যুক্ত ব্যবসায়িক মূল্য নেই। সম্ভবত কিছুটা ক্লিনার তবে এখনও ডোমেন অবজেক্টগুলিতে প্রচুর অ প্রাসঙ্গিক কোড।

কোন পরামর্শ, পরামর্শ বা বিকল্প বিকল্প এখানে?

উত্তর:


8

আপনার কাছে অনেকগুলি বিকল্প রয়েছে।

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

  • পরীক্ষার প্রক্রিয়াতে অটোম্যাপার অন্তর্ভুক্ত করুন। কেউ কেউ বলবেন এটি আর ইউনিট পরীক্ষা নয়। এটা কোনো ব্যপার না. ইউনিট টেস্টিং একমাত্র পরীক্ষা নয়।

  • এমন কিছু প্রয়োগ করুন যা পরীক্ষার জন্য বিশেষত অটোম্যাপারের কার্যকারিতা সরবরাহ করে। আপনি সহজেই একটি সামান্য ইউটিলিটি লিখতে পারেন যা সম্পত্তির নাম এবং মান সহ একটি অভিধান থেকে আপনার অবজেক্টকে পপুলেশন করতে প্রতিবিম্ব ব্যবহার করবে।

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


3

পরীক্ষায় এই জাতীয় জিনিসের প্রতিচ্ছবি ব্যবহার করতে আমি দ্বিধা করি না।

বিদ্রূপের জন্য জিনিসগুলিকে ভার্চুয়াল তৈরি করা আমার পছন্দ নয় কারণ এটি ভুল কারণে কোড পরিবর্তন করে।

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

নমুনা হ্যাক প্রতিবিম্ব ব্যবহার করে, নাম ব্যবহার করে () ব্যবহার করে ভাল পারফ থাকে তবে তারপরে আপনি আলগা ধরণের হয়ে থাকবেন:

public static class TestExtensions
{
    public static void SetProperty<TSource, TProperty>(
        this TSource source,
        Expression<Func<TSource, TProperty>> prop,
        TProperty value)
    {
        var propertyInfo = (PropertyInfo)((MemberExpression)prop.Body).Member;
        propertyInfo.SetValue(source, value);
    }
}

0

ইউনিট পরীক্ষার উদ্দেশ্যে, মাইক্রোসফ্ট ফেকস, টাইপমক এবং জাস্টমকের মতো মশকরা ফ্রেমওয়ার্কগুলি ব্যবহার করুন যা ব্যক্তিগত সদস্যদের উপহাস করার জন্য সমর্থন সরবরাহ করে।

স্মোকস (অ্যাক্সেসযোগ্য @ নুগেট প্যাকেজ) এও দয়া করে দেখুন। স্মোকসের সীমাবদ্ধতা হ'ল এটি ব্যক্তিগত সদস্যদের অ্যাক্সেস সরবরাহ করবে না। তবে এটি স্থির এবং অ-ভার্চুয়াল সদস্যদের উপহাস করার ক্ষমতা রাখে। এছাড়াও এটি নিখরচায় পাওয়া যায়।

আর একটি সহজ উপায় হ'ল প্রাইভেটঅবজেক্ট / প্রাইভেটটাইপ।

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