"কোনও সেটেটর" বিশ্বে ইউনিট টেস্টিং


23

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

public class MyClass
{
    public Boolean IsPublished
    {
        get { return PublishDate != null; }
    }

    public DateTime? PublishDate { get; set; }

    public void Publish()
    {
        if (IsPublished)
            throw new InvalidOperationException("Already published.");

        PublishDate = DateTime.Today;

        Raise(new PublishedEvent());
    }
}

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

আসুন নীচের কোডটি দিয়ে দৃশ্যকে আরও কিছুটা বাস্তব-জগতে পরিণত করুন:

public class Document
{
    public Document(String title)
    {
        if (String.IsNullOrWhiteSpace(title))
            throw new ArgumentException("title");

        Title = title;
    }

    public String ApprovedBy { get; private set; }
    public DateTime? ApprovedOn { get; private set; }
    public Boolean IsApproved { get; private set; }
    public Boolean IsPublished { get; private set; }
    public String PublishedBy { get; private set; }
    public DateTime? PublishedOn { get; private set; }
    public String Title { get; private set; }

    public void Approve(String by)
    {
        if (IsApproved)
            throw new InvalidOperationException("Already approved.");

        ApprovedBy = by;
        ApprovedOn = DateTime.Today;
        IsApproved = true;

        Raise(new ApprovedEvent(Title));
    }

    public void Publish(String by)
    {
        if (IsPublished)
            throw new InvalidOperationException("Already published.");

        if (!IsApproved)
            throw new InvalidOperationException("Cannot publish until approved.");

        PublishedBy = by;
        PublishedOn = DateTime.Today;
        IsPublished = true;

        Raise(new PublishedEvent(Title));
    }
}

আমি ইউনিট পরীক্ষা লিখতে চাই যা যাচাই করে:

  • দস্তাবেজটি অনুমোদিত না হলে আমি প্রকাশ করতে পারি না
  • আমি কোনও দস্তাবেজ পুনরায় প্রকাশ করতে পারি না
  • প্রকাশিত হলে প্রকাশিত ও প্রকাশিত মানগুলি যথাযথভাবে সেট করা থাকে
  • প্রকাশিত হলে প্রকাশিত ইভেন্টটি উত্থাপিত হয়

সেটারগুলিতে অ্যাক্সেস না করে, আমি পরীক্ষাগুলি সম্পাদনের জন্য প্রয়োজনীয় বস্তুকে রাজ্যে রাখতে পারি না। সেটটারগুলিতে অ্যাক্সেস খোলা অ্যাক্সেস প্রতিরোধের উদ্দেশ্যকে পরাস্ত করে।

আপনি কীভাবে (আছে) এই সমস্যাটি সমাধান করবেন?


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

1
দ্রুত প্রশ্ন, আপনি কোন ও / আরএম ব্যবহার করছেন? আমি ইএফের একটি বড় অনুরাগী তবে সেটারগুলি সুরক্ষিত হিসাবে ঘোষণা করা আমাকে ভুল উপায়ে কিছুটা ঘষে।
মাইকেল ব্রাউন 21

ফ্রি-রেঞ্জ ডেভলপমেন্টের কারণে আমার কাছে ঝাঁকুনির অভিযোগ আনা হয়েছে বলে আমাদের এখনই একটি মিশ্রণ রয়েছে N ) এবং কিছু নতুন ইএফ মডেল।
SonOfPirate

দুবার প্রকাশনা কল করা মোটেও দুর্গন্ধযুক্ত নয় এবং এটি করার উপায়।
পাইওটর পেরাক

উত্তর:


27

পরীক্ষাগুলি সম্পাদনের জন্য প্রয়োজনীয় বস্তুটিকে আমি রাজ্যে রাখতে পারি না।

যদি আপনি কোনও পরীক্ষা করার জন্য প্রয়োজনীয় বস্তুটিকে রাজ্যে রাখতে না পারেন, তবে আপনি পণ্যটিকে প্রযোজনা কোডে রাজ্যে রাখতে পারবেন না, সুতরাং সেই রাজ্যটি পরীক্ষা করার দরকার নেই । একথাও ঠিক যে, এই আপনার ক্ষেত্রে সত্য নয়, আপনি পারবেন না প্রয়োজনীয় দশায় আপনার বস্তুর করা, শুধু অনুমোদন কল।

  • দস্তাবেজ অনুমোদন না হওয়া পর্যন্ত আমি প্রকাশ করতে পারি না: কলিং অনুমোদনের আগে কলিং পাবলিশিংয়ের কারণে বস্তুর স্থিতি পরিবর্তন না করে সঠিক ত্রুটির কারণ হয় এমন একটি পরীক্ষা লিখুন।

    void testPublishBeforeApprove() {
        doc = new Document("Doc");
        AssertRaises(doc.publish, ..., NotApprovedException);
    }
    
  • আমি কোনও দস্তাবেজ পুনঃপ্রকাশ করতে পারি না: একটি পরীক্ষা লিখুন যা কোনও বস্তুকে অনুমোদন দেয়, তারপরে প্রকাশকে একবার সফল বলে কল করা, তবে দ্বিতীয় বারের কারণে অবজেক্টের স্থিতি পরিবর্তন না করে সঠিক ত্রুটির কারণ হয়।

    void testRePublish() {
        doc = new Document("Doc");
        doc.approve();
        doc.publish();
        AssertRaises(doc.publish, ..., RepublishException);
    }
    
  • প্রকাশিত হলে, প্রকাশিত ও প্রকাশিত মানগুলি যথাযথভাবে সেট করা থাকে: কলগুলি এমন একটি পরীক্ষা লিখুন যা কলগুলি অনুমোদনের পরে কল করুন প্রকাশ করুন, দৃ as়ভাবে বলুন যে অবজেক্টের অবস্থাটি সঠিকভাবে পরিবর্তিত হয়

    void testPublish() {
        doc = new Document("Doc");
        doc.approve();
        doc.publish();
        Assert(doc.PublishedBy, ...);
        ...
    }
    
  • প্রকাশিত হলে প্রকাশিত ইভেন্টটি উত্থাপিত হয়: ইভেন্ট সিস্টেমে হুক করুন এবং এটি বলা হয়েছে তা নিশ্চিত করার জন্য একটি পতাকা সেট করুন

অনুমোদনের জন্য আপনাকে পরীক্ষাও লিখতে হবে।

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


যখন অ্যাপ্রুভ বিরতি দেয়, তখন বেশ কয়েকটি পরীক্ষা বিরতি দেয়। আপনি আর কোডের একক পরীক্ষা করছেন না, আপনি সম্পূর্ণ বাস্তবায়ন পরীক্ষা করছেন।
পিডিআর

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

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

12
কেন approve()একরকম ভঙ্গুর উপর নির্ভর করে , তবুও setApproved(true)কোনওভাবে নির্ভর করে না? approve()এটি পরীক্ষাগুলিতে বৈধ নির্ভরতা কারণ এটি প্রয়োজনীয়তার উপর নির্ভরশীলতা। নির্ভরশীলতা যদি কেবল পরীক্ষাগুলিতেই থাকে তবে তা অন্য সমস্যা।
কার্ল বিলেফেল্ট

2
@ পিডিআর, আপনি কীভাবে একটি স্ট্যাক ক্লাস পরীক্ষা করবেন? আপনি স্বাধীনভাবে পরীক্ষা push()এবং pop()পদ্ধতি পরীক্ষা করার চেষ্টা করবেন ?
উইনস্টন ইওয়ার্ট

2

তবুও আরেকটি পদ্ধতি হ'ল শ্রেণীর এমন একজন কনস্ট্রাক্টর তৈরি করা যা অভ্যন্তরীণ বৈশিষ্ট্যগুলি ইনস্ট্যান্টেশনে সেট করতে দেয়:

 public Document(
  String approvedBy,
  DateTime? approvedOn,
  Boolean isApproved,
  Boolean isPublished,
  String publishedBy,
  DateTime? publishedOn,
  String title)
{
  ApprovedBy = approvedBy;
  ApprovedOn = approvedOn;
  IsApproved = isApproved;
  IsApproved = isApproved;
  PublishedBy = publishedBy;
  PublishedOn = publishedOn;
}

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

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

এমনকি যদি বস্তুর একটি সম্পত্তি থাকে এবং কখনও পরিবর্তন না করে তবে এই সমাধানটি খারাপ। উত্পাদনে এই কনস্ট্রাক্টরটি ব্যবহারে কাউকে কী থামায়? আপনি কীভাবে এই নির্মাণকারীটিকে [টেস্টঅনলি] চিহ্নিত করবেন?
পাইওটার পেরাক

কেন এটি উত্পাদন খারাপ? (সত্যিই, আমি জানতে চাই) কখনও কখনও এটি তৈরির সময়ে কোনও অবজেক্টের যথাযথ অবস্থা পুনরায় তৈরি করা প্রয়োজন ... কেবলমাত্র একটি বৈধ প্রাথমিক অবজেক্ট নয়।
পিটার কে।

1
সুতরাং যখন এটি অবজেক্টটিকে একটি বৈধ প্রাথমিক অবস্থায় ফেলতে সহায়তা করে, বস্তুটির আচরণের পরীক্ষা করে এটির জীবনচক্রের মধ্য দিয়ে অগ্রগতি হয় তখন প্রয়োজন যে বস্তুকে তার প্রাথমিক অবস্থা থেকে পরিবর্তন করা উচিত। আমার ওপিকে এই অতিরিক্ত রাজ্যগুলি পরীক্ষা করার সাথে করতে হবে যখন আপনি কেবলমাত্র বস্তুর অবস্থা পরিবর্তন করতে সম্পত্তি সেট করতে পারবেন না।
SonOfPirate

1

একটি কৌশল হ'ল আপনি শ্রেণীর উত্তরাধিকারী (এই ক্ষেত্রে নথি) এবং উত্তরাধিকারসূত্রে প্রাপ্ত শ্রেণীর বিপরীতে পরীক্ষা লিখুন write উত্তরাধিকার সূত্রে প্রাপ্ত শ্রেণি পরীক্ষায় অবজেক্টের স্থিতি নির্ধারণের জন্য কিছু উপায় দেয় allows

সি # তে কৌশলটি সেটটারদের অভ্যন্তরীণ করা, তারপরে ইন্টার্নালগুলি পরীক্ষার প্রকল্পে প্রকাশ করা হতে পারে।

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


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

1

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

কেবল একটি নোট সম্পাদনা করুন, কিছু সময় জেএসওএন সিরিয়ালাইজেশন ব্যর্থ হয় (চক্রাকার বস্তুর গ্রাফগুলির ক্ষেত্রে, এটি গন্ধযুক্ত, বিটিডাব্লু)। এই ধরনের পরিস্থিতিতে, আমি বাইনারি সিরিয়ালায়নের উদ্ধার করি। এটি কিছুটা বাস্তববাদী, তবে কাজ করে। :-)


যদি কোনও সেটরারের ব্যবস্থা না থাকে এবং আপনি সেট আপ করার জন্য এটি সর্বজনীন পদ্ধতিতে কল করতে না চান তবে আপনি কীভাবে প্রত্যাশিত অবস্থায় অবজেক্টটি প্রস্তুত করবেন?
পাইওটার পেরাক

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

আমি বুঝতে পারি না যে কীভাবে কিছু পরিবর্তন হয়। এটি এখনও যদি পাটের পাবলিক পদ্ধতিগুলিকে কল দেয় (পরীক্ষার অধীনে সিস্টেম) তবে তার চেয়ে আলাদা নয় কেবল পরীক্ষায় সেই পদ্ধতিগুলি কল করে।
পাইওটর পেরাক

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

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

-7

তুমি বলো

যখনই সম্ভব সেরা অভ্যাস প্রয়োগ করার চেষ্টা করুন

এবং

ওআরএম আমরা অবজেক্টগুলিকে হাইড্রেট করতে ব্যবহার করছি প্রতিবিম্বটি ব্যবহার করে যাতে এটি ব্যক্তিগত সেটারগুলিতে অ্যাক্সেস করতে সক্ষম হয়

এবং আমার মনে করতে হবে যে আপনার ক্লাসে অ্যাক্সেস নিয়ন্ত্রণকে বাইপাসে প্রতিবিম্ব ব্যবহার করে আমি "সেরা অনুশীলন" হিসাবে বর্ণনা করব না। এটি খুব মারাত্মক ধীর হতে চলেছে।


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

আপনি যদি কোড ব্লাট সম্পর্কে উদ্বিগ্ন হন তবে কেবলমাত্র ডিবাগ কোডে উপলভ্য করার জন্য #ifdefs এ পরীক্ষার পদ্ধতিগুলি মুড়িয়ে রাখুন (সম্ভবত এটি একটি সেরা অনুশীলন)


4
-1: আপনার পরীক্ষার কাঠামোটি স্ক্র্যাপ করে ক্লাসের অভ্যন্তরে পরীক্ষা পদ্ধতিতে ফিরে যাওয়া একক পরীক্ষার অন্ধকার যুগে ফিরে আসবে।
রবার্ট জনসন

9
আমার কাছ থেকে নং -১, তবে পরীক্ষার কোড সহ উত্পাদন সাধারণত একটি খারাপ জিনিস (টিএম)
পিটার কে।

ওপি আর কি করে? বেসরকারী সেটটারগুলির সাথে স্ক্রু আঁকড়ে থাকুন ?! এটি আপনি কোন বিষটি পান করতে চান তা পছন্দ করার মতো। ওপিকে আমার পরামর্শ হ'ল ইউনিট পরীক্ষাটি ডিবাগ কোডে স্থাপন করা, উত্পাদন নয়। আমার অভিজ্ঞতায়, ইউনিট টেস্টগুলিকে অন্য কোনও প্রকল্পে রাখার অর্থ হ'ল প্রকল্পটি যাইহোক মূলটির সাথে নিবিড়ভাবে আবদ্ধ হয়, সুতরাং কোনও ডিভ পিওভি থেকে, কিছুটা পার্থক্য নেই।
gbjbaanb
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.