ইউনিট টেস্টের জন্য কিছু জনপ্রিয় নামকরণের সম্মেলনগুলি কী কী? [বন্ধ]


203

সাধারণ

  • সমস্ত পরীক্ষার জন্য একই মান অনুসরণ করুন।
  • প্রতিটি পরীক্ষার রাষ্ট্র কী তা সম্পর্কে পরিষ্কার থাকুন।
  • প্রত্যাশিত আচরণ সম্পর্কে সুনির্দিষ্ট হন।

উদাহরণ

1) মেথডনম_সেটেটঅন্ডারটেষ্ট_একটিপ্রেসিভ আচরণ hav

Public void Sum_NegativeNumberAs1stParam_ExceptionThrown() 

Public void Sum_NegativeNumberAs2ndParam_ExceptionThrown () 

Public void Sum_simpleValues_Calculated ()

উত্স: ইউনিট টেস্টের নামকরণের মান

2) অ্যান্ডস্কোর দ্বারা প্রতিটি শব্দ পৃথক

Public void Sum_Negative_Number_As_1st_Param_Exception_Thrown() 

Public void Sum_Negative_Number_As_2nd_Param_Exception_Thrown () 

Public void Sum_Simple_Values_Calculated ()

অন্যান্য

  • পরীক্ষার সাথে শেষ পদ্ধতির নাম
  • শ্রেণীর নাম সহ পদ্ধতির নাম শুরু করুন

উত্তর:


94

আমি এই এক ব্যক্তির সাথে আপনার সাথে অনেক বেশি আছি। আপনি যে নামকরণের সম্মেলনগুলি ব্যবহার করেছেন সেগুলি হ'ল:

  • প্রতিটি পরীক্ষার রাষ্ট্র কী তা সম্পর্কে পরিষ্কার করুন।
  • প্রত্যাশিত আচরণ সম্পর্কে সুনির্দিষ্ট

পরীক্ষার নাম থেকে আপনার আর কী দরকার?

রায়ের উত্তরের বিপরীতে আমি মনে করি না যে পরীক্ষার উপসর্গটি প্রয়োজনীয়। এটি টেস্ট কোড, আমরা এটি জানি। কোডটি সনাক্ত করতে আপনার যদি এটি করতে হয় তবে আপনার আরও বড় সমস্যা রয়েছে, আপনার পরীক্ষার কোডটি আপনার প্রোডাকশন কোডের সাথে মিশ্রিত করা উচিত নয়।

আন্ডারস্কোরের দৈর্ঘ্য এবং ব্যবহারের জন্য, এর টেস্ট কোডটি , কে রেহাই দেয়? কেবল আপনি এবং আপনার দল এটি দেখতে পাবে, যতক্ষণ না এটি পাঠযোগ্য এবং পরীক্ষাগুলি কী করছে তা পরিষ্কার করে দেওয়া চালিয়ে যান! :)

তাই বলা হয়, আমি এখনও বেশ পরীক্ষা এবং নতুন am এটি দিয়ে আমার এডভেন্ঞার ট্যুরিজম ব্লগিং :)


20
সামান্য বৈপরীত্য "যতক্ষণ না এটি পঠনযোগ্য এবং পরিষ্কার" এবং "কে ... যত্ন করে"। সবাই যখন পড়তে এবং পরিষ্কার না হয় সেদিকে খেয়াল রাখে তাই সে কারণেই এটি গুরুত্বপূর্ণ। :-)
ডেভিড ভিক্টর

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

@ THISUSERNEEDSHELP আমি মনে করি src / libs & src / টেস্টের মতো একটি ভাল ফোল্ডার কাঠামো রেখে আপনার পয়েন্টটি সহজেই কাটিয়ে উঠতে পারে । আমি কিছু পরীক্ষা রানার অবকাঠামো মত একটি উপসর্গ প্রয়োজন জানি পরীক্ষা পরীক্ষা কোড সনাক্ত করার জন্য, তাই যাদের ক্ষেত্রে এড়িয়ে যাওয়া হবে না, কিন্তু বাকি জন্য এটি একটি পুনরাবৃত্তিমূলক হতে পারে কোন প্রয়োজন উপসর্গ।
negrotico19

@ নেগ্রোটিকো 19 আমি যখন ইন্টেলিজ-তে Search Everywhere(শিফট শিফট) বা Find a Class By Name(সিএমডি হে) তখন মামলার কথা ভাবছি । আমি পেয়েছি এটি যে কোনও ফোল্ডার কাঠামো বা মডিউল কাঠামোর দ্বারা পৃথক হবে , তবে আমরা যখন কোনও কিছুর সন্ধান করি, আমরা ইতিমধ্যে জানি যা আমরা অনুসন্ধান করতে চাই। উদাহরণস্বরূপ, আমি যদি কোনও পরীক্ষার সন্ধান করছি, আমি নিজের সন্ধানটি সীমাবদ্ধ রাখতে চাই testএবং তারপরে নামটি অনুসন্ধানের পরিবর্তে নাম অনুসন্ধান করব এবং তারপরে চোখের সাহায্যে নিজেই পরীক্ষার ফিল্টার আউট করব। এটি একটি ছোট পার্থক্য, তবে "[শ্রেণীর নাম] পরীক্ষা করা" এবং এটির জন্য একটি মাত্র পপআপ এবং মানসিক বোঝা হ্রাস করা খুব সহজ
এই ব্যবহারকারী

37

এটিও পড়ার মতো: স্ট্রাকচারিং ইউনিট টেস্টগুলি

কাঠামোর প্রতিটি শ্রেণি পরীক্ষা করা হচ্ছে। এটি এতটা অস্বাভাবিক নয়। তবে আমার কাছে যা অস্বাভাবিক ছিল তা হ'ল প্রতিটি পদ্ধতির পরীক্ষার জন্য তার নেস্টেড ক্লাস ছিল।

যেমন

using Xunit;

public class TitleizerFacts
{
    public class TheTitleizerMethod
    {
        [Fact]
        public void NullName_ReturnsDefaultTitle()
        {
            // Test code
        }

        [Fact]
        public void Name_AppendsTitle()
        {
            // Test code
        }
    }

    public class TheKnightifyMethod
    {
        [Fact]
        public void NullName_ReturnsDefaultTitle()
        {
            // Test code
        }

        [Fact]
        public void MaleNames_AppendsSir()
        {
            // Test code
        }

        [Fact]
        public void FemaleNames_AppendsDame()
        {
            // Test code
        }
    }
}

এবং এখানে কেন:

একটি জিনিস জন্য ভাল, পরীক্ষা সুসংহত রাখা একটি দুর্দান্ত উপায়। একটি পদ্ধতির সমস্ত পরীক্ষা (বা তথ্য) একসাথে গ্রুপ করা হয়। উদাহরণস্বরূপ, যদি আপনি পদ্ধতিটি বদ্ধ করতে CTRL + M, CTRL + O শর্টকাট ব্যবহার করেন তবে আপনি সহজেই আপনার পরীক্ষাগুলি স্ক্যান করতে পারেন এবং সেগুলি আপনার কোডের জন্য একটি নির্দিষ্ট হিসাবে পড়তে পারেন।

আমি এই পদ্ধতিটি পছন্দ করি:

MethodName_StateUnderTest_ExpectedBehavior

সুতরাং সম্ভবত:

StateUnderTest_ExpectedBehavior

কারণ প্রতিটি পরীক্ষা ইতিমধ্যে নেস্টেড ক্লাসে থাকবে


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

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

28

আমি MethodName_DoesWhat_WhenTheseConditionsউদাহরণস্বরূপ এর অধিবেশন ব্যবহার করার ঝোঁক :

Sum_ThrowsException_WhenNegativeNumberAs1stParam

যাইহোক, আমি যা দেখতে পাই তা হ'ল পরীক্ষার নামটি ইউনিট পরীক্ষার কাঠামো অনুসরণ করে

  • ব্যবস্থা করা
  • আইন
  • জাহির করা

যা এর বিডিডি / ঘেরকিন সিনট্যাক্স অনুসরণ করে:

  • প্রদত্ত
  • কখন
  • তারপর

যা পরীক্ষার পদ্ধতিতে নামকরণ করা হবে: UnderTheseTestConditions_WhenIDoThis_ThenIGetThis

আপনার উদাহরণে তাই:

WhenNegativeNumberAs1stParam_Sum_ThrowsAnException

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


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

অন্য কথায়, আমি পছন্দ করি: এর Sum_ThrowsException_WhenNegativeNumberAs1stParamচেয়ে ভাল Sum_Throws_Exception_When_Negative_Number_As_1st_Param


22

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

[TestMethod]
public void CanCountAllItems() {
  // Test the total count of items in collection.
}

প্রতিটি পরীক্ষার ক্লাসে কেবল একটি অন্য শ্রেণির পরীক্ষা করা উচিত এই কারণে আমি ক্লাসের নামটি পদ্ধতির নামটি ছাড়াই। পরীক্ষার পদ্ধতি রয়েছে এমন শ্রেণীর নাম পোস্টফিক্স "টেস্ট" দিয়ে পরীক্ষার অধীনে শ্রেণীর মতো করা হয়েছে।

[TestClass]
public class SuperCollectionTests(){
    // Any test methods that test the class SuperCollection
}

যে পদ্ধতিগুলি ব্যতিক্রম বা ক্রিয়াগুলির পক্ষে পরীক্ষা করা সম্ভব নয় যা সম্ভব নয়, আমি পরীক্ষার পদ্ধতিটি Cannot শব্দের সাথে উপস্থাপন করি ।

[TestMethod]
[ExpectedException(typeOf(ArgumentException))]
public void CannotAddSameObjectAgain() {
  // Cannot add the same object again to the collection.
}

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


1
আমার পোস্টের লিঙ্কের জন্য +1 - যদিও আপনার টেস্টগুলিতে "টেস্ট" উপসর্গটি ব্যবহার করা অপ্রয়োজনীয়। আপনার পরীক্ষাগুলি প্রত্যাশিত আচরণটি নির্দিষ্ট করে তা নিশ্চিত করুন। উদাহরণস্বরূপ, CanRetrieveProperCountWhenAddingM MultipleItems ()
bryanbcook

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

5

নামগুলির প্রথম সেটটি আমার কাছে আরও পঠনযোগ্য, যেহেতু ক্যামেলসেসিং শব্দ এবং আন্ডারবার্সকে নামকরণের স্কিমের পৃথক অংশগুলি পৃথক করে।

আমি কোথাও "টেস্ট" অন্তর্ভুক্ত করার ঝোঁক রাখি, হয় ফাংশনের নাম বা সংযুক্তকরণের নামস্থান বা শ্রেণিতে।


2
@ ফ্র্যাঙ্ক পদ্ধতি নাম = উট কেস পদ্ধতি নাম = পাস্কেল কেস
মেট্রো স্মুরফ

@ মেট্রো-স্মুরফ: আকর্ষণীয় পার্থক্য, আমি প্যাসকেলকেস শব্দটি কখনও শুনিনি, এবং আমি এটি দীর্ঘকাল ধরে করে আসছি। আমি কেবল প্যাসকেলকেস শব্দটি মাইক্রোসফ্ট বিকাশকারী চেনাশোনাগুলিতেই দেখতে পাচ্ছি, আপনি কি তা করেন?
ফ্রাঙ্ক এস্কজারবা

পাস্কেল কেসিং এবং উট কেসিংয়ের কাছাকাছি ইতিহাস (থেকে: ব্র্যাড আব্রামস - ব্লগস.এমএসএনএন / ব্রাদা / অর্চিভ / 2004 / 02 / 03 / 67024.aspx ) ... "ফ্রেমওয়ার্কের প্রাথমিক নকশায় আমাদের কয়েকশ ঘন্টা ছিল নামকরণের স্টাইল সম্পর্কে বিতর্ক debateএই বিতর্কগুলির সুবিধার্থে আমরা বেশ কয়েকটি শর্ত তৈরি করেছিলাম .আন্ডার্স হিলসবার্গের (টার্বো পাস্কালের মূল ডিজাইনার) ডিজাইন দলের একজন গুরুত্বপূর্ণ সদস্যের সাথে, এটি আশ্চর্যের বিষয় নয় যে আমরা কেসিং শৈলীর জন্য পাস্ক্যাল কেসিং শব্দটি বেছে নিয়েছিলাম wonder পাস্কাল প্রোগ্রামিং ভাষা দ্বারা জনপ্রিয় ""
হেলিয়াক

-3

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


-8

পরীক্ষার নেমস্পেস, ক্লাস এবং পদ্ধতিগুলির জন্য আমি একটি 'টি' উপসর্গ ব্যবহার করি।

আমি ঝরঝরে হতে চেষ্টা করি এবং ফোল্ডারগুলি তৈরি করি যা নেমস্পেসগুলি প্রতিলিপি করে, তারপরে পরীক্ষার জন্য একটি পরীক্ষার ফোল্ডার বা পৃথক প্রকল্প তৈরি করে এবং বেসিক পরীক্ষাগুলির জন্য উত্পাদন কাঠামোর প্রতিলিপি:

AProj
   Objects
      AnObj
         AProp
   Misc
      Functions
         AFunc
   Tests
      TObjects
         TAnObj
            TAnObjsAreEqualUnderCondition
      TMisc
         TFunctions
            TFuncBehavesUnderCondition

আমি সহজেই দেখতে পাচ্ছি যে কোনও কিছু একটি পরীক্ষা, আমি এটির মূল কোডটির সাথে সম্পর্কিত ঠিক জানি, (আপনি যদি এটির কাজটি করতে না পারেন, তবে পরীক্ষাটি যেভাবেই হোক খুব কনভলটেড) is

এটি কনফিগারেশনের নামকরণের ইন্টারফেসের মতোই দেখায়, (মানে আপনি 'আমি' দিয়ে শুরু করা জিনিসগুলিতে বিভ্রান্ত হবেন না বা আপনি 'টি' দিয়েও করবেন না)।

পরীক্ষাগুলি দিয়ে বা ছাড়াই কেবল সংকলন করা সহজ।

এটি যাইহোক তত্ত্বের ক্ষেত্রে ভাল, এবং ছোট প্রকল্পগুলির জন্য বেশ ভাল কাজ করে।


3
আকর্ষণীয় পদ্ধতির। কিছু লোক তর্ক করতে পারে যে আপনি জেনারিকস (যেমন ফানক (টি 1, টি 2, ট্রিসল্ট)) ব্যবহার করেন এমন কনফারেন্সের সাথে টি উপসর্গের দ্বন্দ্ব রয়েছে, তবে দলের মধ্যে sensক্যমত্য না হওয়া পর্যন্ত আমি ব্যক্তিগতভাবে পাত্তা দিই না। নামগুলি সংক্ষিপ্ত যা জিনিসগুলি আরও পাঠযোগ্য।
stung

আমার জন্য খুব হাঙ্গেরিয়ান (স্বরলিপি)। এছাড়াও, স্টং স্টাড জানিয়েছে, জেনেরিক ধরণের পরামিতিগুলির জন্য উপসর্গ টি ব্যবহৃত হয়।
ড্যানি ভারোড

আমি সম্মত, হাঙ্গেরিয়ান স্বরলিপি চিত্রিত হয়েছে এবং মান জেনেরিক ধরণের পরামিতিগুলির সাথে দ্বন্দ্বের কারণে, আমি এই ক্ষেত্রে (যেমন ইন্টারফেসের জন্য রয়েছে) একটি ব্যতিক্রম দেখতে পাচ্ছি না।
SonOfPirate
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.