ইউনিট পরীক্ষার নামকরণ সেরা অনুশীলন [বন্ধ]


564

ইউনিট পরীক্ষার ক্লাস এবং পরীক্ষার পদ্ধতি নামকরণের জন্য সেরা অনুশীলনগুলি কী কী?

এর আগে এসও নিয়ে আলোচনা হয়েছিল, ইউনিট টেস্টের জন্য কিছু জনপ্রিয় নামকরণ কনভেনশন কী কী?

যদি এই একটি খুব ভাল পন্থা আমি জানি না, কিন্তু বর্তমানে আমার পরীক্ষাকার্যের প্রকল্পে, আমি প্রতিটি উৎপাদন শ্রেণী এবং একটি পরীক্ষা বর্গ, যেমন মধ্যে একের সাথে এক ম্যাপিং আছে Productএবং ProductTest

আমার পরীক্ষার ক্লাসে আমার তখন পদ্ধতিগুলির নামগুলির সাথে পদ্ধতি রয়েছে যা আমি পরীক্ষা করছি, একটি আন্ডারস্কোর এবং তারপরে পরিস্থিতি এবং আমি কী ঘটতে প্রত্যাশা করি, যেমন Save_ShouldThrowExceptionWithNullName()



1
এটি আপনার প্রশ্নের উত্তর দেয় না, তবে একটি পঠনযোগ্য: haacked.com/archive/2012/01/02/structuring-unit-tests.aspx
রবস

3
গুগল স্টাইল গাইড বলেছেন: test<MethodUnderTest>_<state>যেমন: testPop_emptyStack google-styleguide.googlecode.com/svn/trunk/javaguide.html 5.2.3 পদ্ধতির নাম। সন্দেহ হলে গুগল অনুসরণ করুন।
সিরো সান্তিলি 郝海东 冠状 病 六四 事件 法轮功

2
@ সিরোস্যান্টিলি 六四 事件 法轮功 包 卓 轩 এবং তার পরের বাক্যে বলা হয়েছে: "পরীক্ষার পদ্ধতিগুলির নামকরণের জন্য কোনও সঠিক উপায় নেই"। চিত্রে যান.
ব্যবহারকারী 2418306

1
আমি এখনও বছর কয়েক পরে ফিল হ্যাক এর সুপারিশ পছন্দ ।
পিম্বারউবার্স

উত্তর:


524

আমি রায় ওশেরভের নামকরণ কৌশলটি পছন্দ করি , এটি নিম্নলিখিত:

[UnitOfWork_StateUnderTest_ExpectedBehavior]

এটিতে পদ্ধতির নাম এবং কাঠামোগত পদ্ধতিতে প্রয়োজনীয় প্রতিটি তথ্য রয়েছে।

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

সমাবেশগুলির জন্য আমি সাধারণত .Testsসমাপ্তি ব্যবহার করি, যা আমার মনে হয় বেশ বিস্তৃত এবং ক্লাসগুলির জন্য একই (সমাপ্তি Tests):

[NameOfTheClassUnderTestTests]

আগে আমি টেস্টের পরিবর্তে ফিক্সচারকে প্রত্যয় হিসাবে ব্যবহার করতাম তবে আমি মনে করি যে আধুনিকটি আরও সাধারণ, তখন আমি নামকরণের কৌশলটি পরিবর্তন করেছি changed


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

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

15
পেরির মন্তব্যে যুক্ত করতে - সমস্ত পদ্ধতি কিছু ক্রিয়াকলাপের জন্য দায়ী, যেমন UpdateManager.Update()। এটি মাথায় রেখে আমি আমার পরীক্ষাগুলি কল করতে WhenUpdating_State_Behaviourবা WhenUpdating_Behaviour_State। এইভাবে আমি কোনও পরীক্ষার নামে কোনও মেথডের নামটি এড়াতে এড়াতে ক্লাসের একটি নির্দিষ্ট ক্রিয়া পরীক্ষা করি। তবে সবচেয়ে গুরুত্বপূর্ণ বিষয়টি হ'ল যে আমি যখন ব্যর্থ পরীক্ষার নাম দেখি তখন ব্যবসায়িক যুক্তি কীভাবে ব্যর্থ হচ্ছে সে সম্পর্কে আমার একটি ধারণা থাকা দরকার
রামুনাস

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

62
ভাল পদ্ধতির নামগুলি প্রায়শই পদ্ধতিটি সুগন্ধযুক্ত হিসাবে একই হয়। আপনার পদ্ধতির পরে আপনার পরীক্ষার নামকরণ বা পদ্ধতিটি যে ইঙ্গিত হতে পারে তার ক্রিয়াটির মধ্যে যদি আপনাকে সিদ্ধান্ত নিতে হয় তবে আপনাকে নিজের পদ্ধতির নাম পরিবর্তন করতে হবে । (যদিও প্রতিটি ক্ষেত্রে নয়)
Kaadzia

121

আমি পরীক্ষার অধীনে ইউনিট (অর্থাত ক্লাস) এর পরে পরীক্ষার স্থিতির নামকরণের সময় পরীক্ষার জন্য "উচিত" নামকরণের মানটি অনুসরণ করতে পছন্দ করি ।

উদাহরণস্বরূপ (সি # এবং নুনিট ব্যবহার করে):

[TestFixture]
public class BankAccountTests
{
  [Test]
  public void Should_Increase_Balance_When_Deposit_Is_Made()
  {
     var bankAccount = new BankAccount();
     bankAccount.Deposit(100);
     Assert.That(bankAccount.Balance, Is.EqualTo(100));
  }
}

কেন "উচিত" ?

আমি দেখতে পেয়েছি যে এটি "লেখককে [কিছুটা রাজ্যে থাকা উচিত] [পরে / আগে / কখন] [পদক্ষেপ নেওয়া হয়]" এর লাইনে পরীক্ষার লেখকদের পরীক্ষার নাম লেখাতে বাধ্য করে "

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

আপডেট :

আমি লক্ষ্য করেছি যে জিমি বোগার্ডও 'উচিত' এর অনুরাগী এবং এমনকি ইউনিট টেস্ট লাইব্রেরিও থাকা উচিত

আপডেট (4 বছর পরে ...)

আগ্রহীদের জন্য, নামকরণ পরীক্ষার বিষয়ে আমার পদ্ধতির বিকাশ বছরগুলিতে হয়েছে over সমস্যা এক উচিত প্যাটার্ন আমি তার সহজ নয় উপরের হিসাবে বর্ণনা এক নজরে যা পদ্ধতি এ জানতে পরীক্ষা বয়সী। ওওপি-র জন্য আমি মনে করি পরীক্ষার অধীনে পদ্ধতিটি দিয়ে পরীক্ষার নামটি শুরু করা আরও বোধগম্য। একটি ভাল ডিজাইন করা শ্রেণীর জন্য এটি পঠনযোগ্য পরীক্ষার পদ্ধতির নাম হতে হবে। আমি এখন অনুরূপ একটি বিন্যাস ব্যবহার <method>_Should<expected>_When<condition>। স্পষ্টতই প্রসঙ্গের উপর নির্ভর করে আপনি আরও কিছু উপযুক্ত কিছুর জন্য শ্যাওড / কখন ক্রিয়াগুলি প্রয়োগ করতে চাইতে পারেন। উদাহরণ: Deposit_ShouldIncreaseBalance_WhenGivenPositiveValue()


32
হয়তো আরও ভাল এবং কম অপ্রয়োজনীয়, শুধু একটি বাক্য যে বলে এটি কী, পরীক্ষা কাজ অভিমানী লিখুন: increasesBalanceWhenDepositIsMade()
হটশট 309

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

নিবন্ধটি খুঁজে পেয়েছি। এটি জাস্টিন ইথেরেজেজের কোডটহিন্ড ব্লগে Moq 3 - ভাগ 1 দিয়ে বিদ্রূপ করা শুরু করছে
সাইমন তেউসি

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

2
@ স্নাইডার: "should" = "প্রস্তাবিত" বিবেচনা করে তখন alচ্ছিক, আমি ভাবছি: "shall" = "অবশ্যই" এর পরে প্রয়োজনীয় / বাধ্যতামূলক ব্যবহার করা ভাল যুক্তিযুক্ত নয়? উদাহরণস্বরূপ, আরএফসিগুলি উভয়ের মধ্যে পার্থক্য তৈরি করে। সুতরাং পরীক্ষাগুলি পাস করার পরামর্শ দেওয়া বা প্রয়োজনীয়?
ব্ল্যাকউইজার্ড

79

আমি এই নামকরণ শৈলী পছন্দ:

OrdersShouldBeCreated();
OrdersWithNoProductsShouldFail();

ইত্যাদি। এটি কোন পরীক্ষককে সমস্যাটি কী তা আসলেই পরিষ্কার করে দেয়।


63
- কিন্তু @ hotshot309 তিনি .NET ব্যবহার করে থাকতে পারেন .NET ক্যাপিটালাইজেশান কনভেনশন
টেক্কা

2
@ এক, আমি আপনার সাথে পুরোপুরি একমত এবং আমি এই মন্তব্যটি পোস্ট করার এক মিনিট পরে এটি লক্ষ্য করেছি। আমি শপথ করেছিলাম যে আমার ভুল দেখে আমি এটি মুছে ফেলেছি, তবে কোনওরকম, অনুমান করি আমি তা করি নি। এর জন্যে দুঃখিত.
হটশট 309

3
@ কফিএডিক্ট কারণ শনাক্তকারীদের মধ্যে আন্ডারস্কোরগুলি হ'ল সি #
স্ক্লিভিভিজ

2
আমিও ব্যবহার এড়ানোর জন্য পছন্দ shouldআমি পছন্দ করবে will, যাতেOrdersWithNoProductsWillFail()
Calin

4
@ ক্যালিন আমার মতে ব্যবহার Willকরা সত্যিই উপযুক্ত নয় এবং এটি করার মাধ্যমে আপনি আসলে ভুল করে পাঠককে বলছেন যে কোনওভাবেই পরীক্ষাটি ব্যর্থ হবে না ... যদি আপনি Willভবিষ্যতে এমন কিছু প্রকাশ করতে ব্যবহার করেন যা না ঘটে তবে আপনি সম্ভবত এটি Shouldঅন্যায়ভাবে ব্যবহার করা এখানে আরও ভাল পছন্দ কারণ এটি ইঙ্গিত দেয় যে আপনি কিছু ঘটতে চান / করতে চান তবে তা হয়নি বা করতে পারেনি, যখন পরীক্ষাটি চালায় এটি আপনাকে ব্যর্থ হয়েছে / সফল হয়েছে কিনা তা বলে দেয় তাই আপনি সত্যই বোঝাতে পারবেন না আগেই, এটি এর যৌক্তিক ব্যাখ্যা, আপনার কি? তুমি এড়িয়ে চলবে কেন Should?
আইয়াল সলনিক

51

কেন্ট বেক পরামর্শ দেয়:

  • 'ইউনিট' প্রতি এক পরীক্ষার স্থিরতা (আপনার প্রোগ্রামের শ্রেণি)। টেস্ট ফিক্সচারগুলি নিজেরাই ক্লাস হয়। পরীক্ষার স্থিরতার নামটি হওয়া উচিত:

    [name of your 'unit']Tests
    
  • পরীক্ষার কেসগুলির (পরীক্ষার স্থির পদ্ধতিগুলির) নামগুলির মতো রয়েছে:

    test[feature being tested]
    

উদাহরণস্বরূপ, নিম্নলিখিত ক্লাস থাকা:

class Person {
    int calculateAge() { ... }

    // other methods and properties
}

একটি পরীক্ষার দৃ be়তা হবে:

class PersonTests {

    testAgeCalculationWithNoBirthDate() { ... }

    // or

    testCalculateAge() { ... }
}

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

85
'পরীক্ষার' পদ্ধতির উপসর্গটি কি ক্লাসটির প্রত্যয় দিয়ে রিডানড্যান্ট হয়ে যায়?
গ্যাভিন মিলার

50
মনে রাখবেন কেন্ট কখন সেই বইটি লিখেছিল। বৈশিষ্ট্যগুলি আবিষ্কার করা হয়নি। অতএব পদ্ধতির নামে টেস্ট নামটি পরীক্ষার কাঠামোর দিকে ইঙ্গিত করে যে পদ্ধতিটি ছিল একটি পরীক্ষা। এছাড়াও দর্শন 2002. যেহেতু ঘটেছে আছে
টমাস জেস্পার্সান

14
testCalculateAge ... এটি আপনার পরীক্ষার পদ্ধতির অর্থহীন নাম name "পরীক্ষা" অপ্রয়োজনীয় (আপনি কি "পদ্ধতি" উপসর্গ দিয়ে আপনার সমস্ত পদ্ধতির নাম দেন?)। বাকি নামের কোনও পরীক্ষার অধীনে বা কী আশা করা হয়েছিল তার কোনও শর্ত নেই। ক্যালকুলেটএজ পদ্ধতিটি কি পরীক্ষার অধীনে? ..... কে জানে ...
বাইটেডে

1
আমি যুক্ত করতে চাই যে এই কৌশলটি ব্যবহার করার সময়, প্রত্যাশিত আউটপুট নির্দিষ্ট করার জন্য ডকুমেন্টেশন প্রয়োজন। 'পরীক্ষা' উপসর্গ সম্পর্কে পার্শ্ব নোট হিসাবে; কিছু ইউনিট পরীক্ষার কাঠামোর পরীক্ষাগুলি সনাক্ত করতে নির্দিষ্ট উপসর্গ বা প্রত্যয় প্রয়োজন। 'অ্যাবস্ট্রাক্ট' সহ বিমূর্ত শ্রেণির উপসর্গকে অপব্যবহার হিসাবে বিবেচনা করা হয় না (কারণ এটি স্ব নথিভুক্ত), তাই কেন 'টেস্ট' দিয়ে একই প্রয়োগ হয় না?
siebz0r

17

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

"ইউনিট" ডোমেইনেও প্রচুর ব্যবহৃত হয়। যেমন MeasurementUnit। একটি ক্লাসকে কি MeasurementUnitTest"পরিমাপ" বা "পরিমাপ ইউনাইট" এর পরীক্ষা বলা হয় ?

অতএব আমি আমার সমস্ত পরীক্ষার ক্লাসের জন্য "ক" উপসর্গটি ব্যবহার করতে চাই। যেমন QaSkinTestএবং QaMeasurementUnit। এটি কখনই ডোমেন অবজেক্টগুলির সাথে বিভ্রান্ত হয় না এবং প্রত্যয়ের পরিবর্তে উপসর্গ ব্যবহারের অর্থ এই যে সমস্ত পরীক্ষার ফিক্সচারগুলি একসাথে একসাথে বাস করে (যদি আপনার পরীক্ষার প্রকল্পে জাল বা অন্যান্য সমর্থন ক্লাস থাকে তবে দরকারী)

নামস্থান । আমি সি # তে কাজ করি এবং আমার পরীক্ষার ক্লাসগুলি তারা যে শ্রেণিটি পরীক্ষা করে চলেছে ঠিক সেইভাবেই একই জায়গাতে রাখি। পৃথক পরীক্ষার নেমস্পেস থাকার চেয়ে এটি সুবিধাজনক। অবশ্যই, পরীক্ষার ক্লাসগুলি একটি ভিন্ন প্রকল্পে রয়েছে।

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

WhenDivisorIsNonZero_ExpectDivisionResult
WhenDivisorIsZero_ExpectError
WhenInventoryIsBelowOrderQty_ExpectBackOrder
WhenInventoryIsAboveOrderQty_ExpectReducedInventory

আপনি পরীক্ষার পদ্ধতির নাম এবং পরীক্ষার স্থিরতার নাম সম্পর্কে কথা বলেছেন। পরীক্ষার স্থিরতার নামগুলি উত্পাদন শ্রেণিতে ম্যাপ করা হয়। আপনি কোথায় আপনার পরীক্ষায় উত্পাদন পদ্ধতির নাম লিখবেন?
হালকা

12

আমি দেওয়া-যখন-তখন ধারণাটি ব্যবহার করি । এই সংক্ষিপ্ত নিবন্ধ কটাক্ষপাত http://cakebaker.42dh.com/2009/05/28/given-when-then/ । নিবন্ধটি বিডিডির শর্তে এই ধারণাটি বর্ণনা করে তবে আপনি কোনও পরিবর্তন ছাড়াই এটি টিডিডিতেও ব্যবহার করতে পারেন।


প্রদত্ত-যখন-তখন মেথডনাম_সেনারিও_অত্যাশিত আচরণের মতো, তাই না ?!
হালকা

1
বেপারটা এমন না. প্রদত্ত_তখন_এখন আরও উল্লেখ করে: প্রদত্তএএনটিটিটি_ভেনসোম্যাকশনহ্যাপেনস_সেটসালটুইটস রিসাল্ট অপ্রত্যাশিতভাবে পরীক্ষায় এমন আচরণের পরীক্ষা করার ইচ্ছা প্রকাশ করা উচিত যা বাস্তবায়ন নয়
plog17

1
"দেওয়া যখন তখন" প্রায়শই ঘেরকিন হিসাবে উল্লেখ করা হয়। এটি একটি ডিএসএল যা শসা, জেবিহেভে এবং বেহাত সরঞ্জাম থেকে বেরিয়ে এসেছে।
বাইটেডেভ

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

8

দেখুন: http://googletesting.blogspot.com/2007/02/tott-naming-unit-tests- जबाबदारीজনিতভাবে html

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


7

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


7

আমি সম্প্রতি আমার পরীক্ষাগুলির নামকরণ, তাদের ক্লাস এবং তাদের বর্ণনামূলক সর্বাধিককরণের জন্য প্রকল্পগুলি ধারণের জন্য নিম্নলিখিত কনভেনশন নিয়ে এসেছি:

বলি আমি নেমস্পেসের Settingsএকটি প্রকল্পে ক্লাসটি পরীক্ষা করছি MyApp.Serialization

প্রথমে আমি MyApp.Serialization.Testsনেমস্পেস দিয়ে একটি পরীক্ষা প্রকল্প তৈরি করব ।

এই প্রকল্পের মধ্যে এবং অবশ্যই নেমস্পেসের মধ্যে আমি একটি ক্লাস তৈরি করব IfSettings( নামক সেফসেটিংসস হিসাবে সংরক্ষিত )।

বলি আমি SaveStrings()পদ্ধতিটি পরীক্ষা করছি । -> আমি পরীক্ষার নাম দেব CanSaveStrings()

আমি যখন এই পরীক্ষাটি চালাচ্ছি তখন এটি নীচের শিরোনামটি প্রদর্শন করবে:

MyApp.Serialization.Tests.IfSettings.CanSaveStrings

আমি মনে করি এটি আমাকে খুব ভাল বলেছে, এটি কী পরীক্ষা করছে।

অবশ্যই এটি দরকারী যে ইংরেজীতে বিশেষ্য "টেস্টস" ক্রিয়া "পরীক্ষা" এর সমান।

পরীক্ষার নামকরণে আপনার সৃজনশীলতার কোনও সীমা নেই, যাতে আমরা তাদের জন্য পূর্ণ বাক্য শিরোনাম পাই।

সাধারণত টেস্টের নামগুলি একটি ক্রিয়া দিয়ে শুরু করতে হবে।

উদাহরণ অন্তর্ভুক্ত:

  • সনাক্ত করে (উদাঃ DetectsInvalidUserInput)
  • নিক্ষেপ (উদাঃ ThrowsOnNotFound)
  • উইল (যেমন WillCloseTheDatabaseAfterTheTransaction)

প্রভৃতি

আরেকটি বিকল্প হ'ল "যদি" এর পরিবর্তে "" "ব্যবহার করুন।

পরেরটি আমাকে কীস্ট্রোকগুলি সংরক্ষণ করে এবং আমি ঠিক কী করছি তা বর্ণনা করে, যেহেতু আমি জানি না যে পরীক্ষিত আচরণটি উপস্থিত রয়েছে, তবে এটি কিনা তা পরীক্ষা করে নিচ্ছি ।

[ সম্পাদনা ]

উপরের নামকরণের কনভেনশনটি এখন আরও কিছুক্ষণ ব্যবহার করার পরে আমি খুঁজে পেয়েছি যে ইন্টারফেসের সাথে কাজ করার সময় যদি উপসর্গটি বিভ্রান্ত হতে পারে। এটি ঠিক তাই ঘটে, যা পরীক্ষার শ্রেণি ifSerializer.cs "ওপেন ফাইল ট্যাব" এর ইন্টারফেস ইসিরাইরিয়ার.সি এর সাথে খুব মিল দেখায় । পরীক্ষাগুলি, শ্রেণি পরীক্ষা করা হচ্ছে এবং এর ইন্টারফেসের মধ্যে পিছনে স্যুইচ করার সময় এটি খুব বিরক্তিকর হতে পারে। এর ফলে আমি এখন চয়ন করবে যে ওভার যদি একটি উপসর্গ হিসাবে।

অতিরিক্ত হিসাবে আমি এখন ব্যবহার করি - কেবলমাত্র আমার পরীক্ষার ক্লাসের পদ্ধতির জন্য এটি অন্য কোথাও সেরা অনুশীলন হিসাবে বিবেচিত হয় না - "_" আমার পরীক্ষার পদ্ধতির নামগুলিতে যেমন শব্দগুলি পৃথক করে:

[Test] public void detects_invalid_User_Input()

আমি এটি পড়া সহজ বলে মনে করি।

[ শেষ সম্পাদনা ]

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


2

ভিএস + নুনিটে আমি সাধারণত আমার প্রকল্পের ফোল্ডারগুলি একসাথে গ্রুপের কার্যক্ষম পরীক্ষাগুলিতে তৈরি করি। তারপরে আমি ইউনিট পরীক্ষার ফিক্সচার ক্লাস তৈরি করি এবং আমি যে ধরণের কার্যকারিতাটি পরীক্ষা করে যাচ্ছি তার নাম রেখেছি। [টেস্ট] পদ্ধতির নামগুলি বর্ণিত হয়েছে Can_add_user_to_domain:

- MyUnitTestProject   
  + FTPServerTests <- Folder
   + UserManagerTests <- Test Fixture Class
     - Can_add_user_to_domain  <- Test methods
     - Can_delete_user_from_domain
     - Can_reset_password

2

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

আমি ব্যক্তিগতভাবে "JUnit পকেট গাইড"-এ বর্ণিত সেরা অনুশীলনগুলি পছন্দ করি ... JUnit সহ সহ-লেখক দ্বারা রচিত একটি বইটি পরাজিত করা শক্ত!


3
বিশ্বাস করবেন না এটি আসলে হাতের প্রশ্নের উত্তর দেয় - আপনি কি জুনিত পকেট নির্দেশিকাটি সম্পাদনা এবং পুনরায় প্রচার করতে পারবেন? ধন্যবাদ!
নাট-উইলকিনস

0

Foo ক্লাসের পরীক্ষার কেসের নামটি FooTestCase বা এর মতো কিছু (FooIntegrationTestCase বা FooAcceptanceTestCase) হওয়া উচিত - যেহেতু এটি একটি পরীক্ষার কেস। পরীক্ষা, পরীক্ষার কেস, টেস্ট ফিক্সচার, পরীক্ষার পদ্ধতি ইত্যাদির মতো কিছু স্ট্যান্ডার্ড নামকরণের সম্মেলনের জন্য http://xunitpatterns.com/ দেখুন

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