একটি ভাল ইউনিট পরীক্ষা কি করে? [বন্ধ]


97

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

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

ভাষা অজ্ঞাবল পরামর্শ উত্সাহিত করা হয়।

উত্তর:


93

আমাকে উত্সগুলি প্লাগ করে শুরু করুন - জাভিতের সাথে জাভাতে প্র্যাকমেটিক ইউনিট টেস্টিং (সি #-নুনিতের সাথে একটি সংস্করণও আছে .. তবে আমার কাছে এটি একটি আছে ... বেশিরভাগ অংশের জন্য এটি অজ্ঞেয় প্রস্তাবিত)

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

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

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

আপডেট ২০১০-০৮:

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

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


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

আমি তখন এটিকে একটি উত্তর হিসাবে টুকরো টুকরো করব কারণ আমি "একটি ট্রিপ" সংক্ষিপ্ত রূপটি দরকারী বলে মনে করি।
Spoike

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

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

@ গিশু: হ্যাঁ, একেবারে! পরীক্ষাগুলি শুধুমাত্র ইন্টারফেস স্তরে করা উচিত; এবং প্রকৃতপক্ষে, আপনার বেশিরভাগ বৈশিষ্ট্যগুলি ব্যবহার করা উচিত যা আপনি প্রকৃতপক্ষে ব্যবহার করেন। তদ্ব্যতীত, এই পরীক্ষাগুলি কী লিখতে হবে তা বেছে নেওয়ার সময়; আমি সাধারণ স্ট্রেট-ফরওয়ার্ড 'ইউনিট' টেস্টিং ফ্রেমওয়ার্কগুলি সাধারণত বিলটি পুরোপুরি ফিট করে।
হতাশ

42
  1. জিনরমাস পরীক্ষা লিখবেন না। 'ইউনিট পরীক্ষায়' ইউনিট হিসাবে যেমন প্রস্তাবিত হয়েছে, প্রতিটিকে পারমাণবিক হিসাবে এবং যথাসম্ভব বিচ্ছিন্ন করুন । যদি আপনার অবশ্যই প্রয়োজন হয় তবে ম্যানুয়ালি সাধারণত ব্যবহারকারীর পরিবেশের পুনর্বার চেয়ে মক অবজেক্ট ব্যবহার করে পূর্বশর্ত তৈরি করুন।
  2. স্পষ্টতই কাজ করে এমন জিনিসগুলি পরীক্ষা করবেন না। তৃতীয় পক্ষের বিক্রেতার কাছ থেকে ক্লাস পরীক্ষা করা থেকে বিরত থাকুন, বিশেষত আপনি যে ফ্রেমওয়ার্কটি কোড করেন তার মূল APIs সরবরাহ করে Eg উদাহরণস্বরূপ, বিক্রেতার হাশটেবল শ্রেণিতে কোনও আইটেম যুক্ত করার পরীক্ষা করবেন না।
  3. কোনও কোড কভারেজ সরঞ্জাম যেমন এনসিওভার ব্যবহারের বিষয়ে বিবেচনা করুন যাতে আপনার এখনও পরীক্ষা করা হয়নি edge
  4. বাস্তবায়নের আগে পরীক্ষা লেখার চেষ্টা করুন । আপনার বাস্তবায়ন মেনে চলবে এমন একটি স্পেসিফিকেশন হিসাবে পরীক্ষাটিকে আরও বেশি ভাবেন। সিএফ। আচরণ-চালিত বিকাশ, পরীক্ষা-চালিত বিকাশের একটি আরও নির্দিষ্ট শাখা।
  5. অটল থাক. যদি আপনি কেবল আপনার কিছু কোডের জন্য পরীক্ষা লিখে থাকেন তবে এটি খুব কমই কার্যকর। আপনি যদি একটি দলে কাজ করেন, এবং কিছু বা অন্য কেউ পরীক্ষা না লিখে থাকেন তবে এটি খুব কার্যকর নয়। নিজেকে এবং পরীক্ষার গুরুত্ব (এবং সময় সাশ্রয়কারী বৈশিষ্ট্য) সকলকে বিশ্বাস করুন , বা বিরক্ত করবেন না।

4
ভাল উত্তর. আপনি যদি প্রসবের জন্য সমস্ত কিছুর জন্য ইউনিট পরীক্ষা না করেন তবে এটি খারাপ নয়। নিশ্চিত যে এটি পছন্দনীয়, তবে একটি ভারসাম্য এবং বাস্তববাদী হওয়া দরকার। পুনরায়: আপনার সহকর্মীদের বোর্ডে পেতে; কখনও কখনও আপনার মানটি প্রদর্শন এবং রেফারেন্স পয়েন্ট হিসাবে এটি করা দরকার।
মার্টিন ক্লার্ক

4
আমি রাজী. যাইহোক, দীর্ঘকালীন সময়ে, আপনি সেখানে পরীক্ষাগুলির উপর নির্ভর করতে সক্ষম হবেন, অর্থাৎ ধরে নিতে পারেন যে সাধারণ সমস্যাগুলি তাদের দ্বারা ধরা পড়বে। অন্যথায়, সুবিধাগুলি ব্যাপকভাবে হ্রাস পাচ্ছে।
সেরেন কুকলাউ

4
"যদি আপনি কেবল আপনার কোডের কয়েকটিতে পরীক্ষা লিখেন তবে এটি খুব কার্যকর।" আসলেই কি এই ঘটনা? আমি 20% কোড কভারেজ (অত্যন্ত গুরুত্বপূর্ণ / ব্যর্থ অঞ্চলে প্রবণ) সহ প্রকল্প পেয়েছি এবং তারা আমাকে ব্যাপকভাবে সহায়তা করেছে, এবং প্রকল্পগুলিও ঠিক আছে।
ড। মন্দ

4
আমি স্লুর সাথে একমত এমনকি যদি কয়েকটি পরীক্ষা থাকে তবে সেগুলি ভালভাবে লিখিত এবং যথেষ্ট বিচ্ছিন্নভাবে দেওয়া হলেও তারা প্রচুর পরিমাণে সাহায্য করবে।
Spoike

41

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

ভম্পের রাইটিং টেস্টের 5 টি আইন:


1. দীর্ঘ, বর্ণনামূলক পরীক্ষার পদ্ধতির নাম ব্যবহার করুন।

   - Map_DefaultConstructorShouldCreateEmptyGisMap()
   - ShouldAlwaysDelegateXMLCorrectlyToTheCustomHandlers()
   - Dog_Object_Should_Eat_Homework_Object_When_Hungry()

২. আপনার পরীক্ষাগুলি একটি বিন্যাস / আইন / দৃsert় শৈলীতে লিখুন

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

৩. সর্বদা আপনার সংস্থানগুলির সাথে একটি ব্যর্থতার বার্তা সরবরাহ করুন।

Assert.That(x == 2 && y == 2, "An incorrect number of begin/end element 
processing events was raised by the XElementSerializer");
  • একটি সাধারণ তবুও পুরস্কৃত অনুশীলন যা ব্যর্থ হয়েছে তা আপনার রানার অ্যাপ্লিকেশনটিতে এটি সুস্পষ্ট করে তোলে। যদি আপনি কোনও বার্তা না সরবরাহ করেন তবে আপনি সাধারণত আপনার ব্যর্থতার আউটপুটে "প্রত্যাশিত সত্য, মিথ্যা ছিল" এর মতো কিছু পাবেন যা আসলে কী ভুল তা খুঁজে পেতে আপনাকে পরীক্ষায় পড়তে হবে makes

৪. পরীক্ষার কারণটি মন্তব্য করুন - ব্যবসায়িক অনুমান কী?

  /// A layer cannot be constructed with a null gisLayer, as every function 
  /// in the Layer class assumes that a valid gisLayer is present.
  [Test]
  public void ShouldNotAllowConstructionWithANullGisLayer()
  {
  }
  • এটি সুস্পষ্ট বলে মনে হতে পারে তবে এই অনুশীলনটি আপনার পরীক্ষাগুলির অখণ্ডতা এমন লোকদের কাছ থেকে সুরক্ষিত করবে যারা পরীক্ষার পিছনে কারণটিকে প্রথমে বুঝতে পারে না। আমি অনেকগুলি পরীক্ষা অপসারণ বা সংশোধিত দেখতে পেয়েছি যা পুরোপুরি সূক্ষ্ম ছিল, কেবলমাত্র সেই কারণে যে ব্যক্তি পরীক্ষাটি যাচাই করছে তা অনুধাবনগুলি বুঝতে পারেনি।
  • পরীক্ষাটি যদি তুচ্ছ বা পদ্ধতির নামটি যথেষ্ট বর্ণনামূলক হয় তবে মন্তব্যটি ছেড়ে দেওয়া জায়েয হতে পারে।

৫. প্রতিটি পরীক্ষার অবশ্যই এটি যে কোনও সংস্থার স্পর্শ করে তার স্থিতি সর্বদা ফিরিয়ে দিতে হবে

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

4
পয়েন্ট 1, 2 এবং 5 এর কারণে +1 গুরুত্বপূর্ণ। 3 এবং 4 টি ইউনিট পরীক্ষাগুলির জন্য অত্যধিক বলে মনে হচ্ছে, যদি আপনি ইতিমধ্যে বর্ণনামূলক টেস্ট পদ্ধতির নাম ব্যবহার করে থাকেন তবে আমি পরীক্ষাগুলির স্কোপগুলিতে বড় (কার্যকরী বা স্বীকৃতি পরীক্ষার) বড় হলে ডকুমেন্টেশন করার পরামর্শ দিই।
Spoike

ডাউন-টু-আর্থ এবং ব্যবহারিক জ্ঞান এবং উদাহরণগুলির জন্য +1
ফিল

17

এই লক্ষ্যগুলি মাথায় রাখুন (মেসজারোস দ্বারা xUnit টেস্ট প্যাটার্নস বইটি রূপান্তরিত)

  • টেস্টগুলির ঝুঁকি হ্রাস করা উচিত, এটি প্রবর্তন করা উচিত নয়।
  • টেস্টগুলি চালানো সহজ হওয়া উচিত।
  • সিস্টেমগুলি তাদের চারপাশে বিকশিত হওয়ায় টেস্টগুলি বজায় রাখা সহজ হওয়া উচিত

এটি সহজ করার জন্য কিছু জিনিস:

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

ভুলে যাবেন না যে আপনি আপনার এক্স ইউনাইট ফ্রেমওয়ার্কের সাথেও সংহতকরণ পরীক্ষা করতে পারেন তবে একীকরণ পরীক্ষা এবং ইউনিট পরীক্ষা আলাদা রাখুন


আমার ধারণা আপনি জেরার্ড মেসারোসের "xUnit টেস্ট প্যাটার্নস" বইটি গ্রহণ করেছেন meant xunitpatterns.com
স্পোক

হ্যাঁ, আপনি ঠিক বলেছেন। আমি পোস্টে এটি পরিষ্কার করব
মেন্ডেল্ট

দুর্দান্ত পয়েন্ট। ইউনিট পরীক্ষাগুলি খুব দরকারী হতে পারে তবে জটিল, আন্তঃনির্ভর ইউনিট পরীক্ষা করার ফাঁদে পড়ে যাওয়া এড়াতে খুব গুরুত্বপূর্ণ যা ব্যবস্থা পরিবর্তন করার যে কোনও প্রয়াসের জন্য বিশাল ট্যাক্স তৈরি করে।
শুক্র

9

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


9

দুর্দান্ত ইউনিট পরীক্ষার কিছু বৈশিষ্ট্য:

  • যখন কোনও পরীক্ষা ব্যর্থ হয়, সমস্যাটি কোথায় রয়েছে তা অবিলম্বে স্পষ্ট হওয়া উচিত। সমস্যাটি সন্ধান করতে যদি আপনাকে ডিবাগারটি ব্যবহার করতে হয় তবে আপনার পরীক্ষাগুলি পর্যাপ্ত দানাদার নয়। পরীক্ষায় প্রতি ঠিক একটি দৃser়তা থাকা এখানে সহায়তা করে।

  • আপনি যখন অশোধক, কোনও পরীক্ষা ব্যর্থ হওয়া উচিত।

  • টেস্টগুলি এত দ্রুত চালানো উচিত যে আপনি সেগুলি চালাতে কখনই দ্বিধা করেন না।

  • সমস্ত পরীক্ষা সর্বদা পাস করা উচিত; কোনও অ-নিরস্তকর ফলাফল নেই।

  • ইউনিট পরীক্ষাগুলি আপনার প্রোডাকশন কোডের মতোই ভাল-গুণযুক্ত হওয়া উচিত।

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


সম্পাদনা: "প্রতি পরীক্ষার জন্য একটি জোর" দ্বারা নকল সম্পর্কে একটি মন্তব্য ছিল। বিশেষত, যদি আপনার কাছে একটি দৃশ্য সেট আপ করার জন্য কিছু কোড থাকে এবং তারপরে এটি সম্পর্কে একাধিক প্রতিবেদন তৈরি করতে চান তবে পরীক্ষার জন্য কেবল একটি প্রতিপত্তি থাকলে আপনার একাধিক পরীক্ষায় সেটআপটি নকল হতে পারে।

আমি এই পদ্ধতির গ্রহণ করি না। পরিবর্তে, আমি প্রতি দৃশ্যে টেস্ট ফিক্সচার ব্যবহার করি । এখানে একটি মোটামুটি উদাহরণ:

[TestFixture]
public class StackTests
{
    [TestFixture]
    public class EmptyTests
    {
        Stack<int> _stack;

        [TestSetup]
        public void TestSetup()
        {
            _stack = new Stack<int>();
        }

        [TestMethod]
        [ExpectedException (typeof(Exception))]
        public void PopFails()
        {
            _stack.Pop();
        }

        [TestMethod]
        public void IsEmpty()
        {
            Assert(_stack.IsEmpty());
        }
    }

    [TestFixture]
    public class PushedOneTests
    {
        Stack<int> _stack;

        [TestSetup]
        public void TestSetup()
        {
            _stack = new Stack<int>();
            _stack.Push(7);
        }

        // Tests for one item on the stack...
    }
}

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

আমি মনে করি আমরা একমত যে DRY ইউনিট পরীক্ষায় প্রযোজ্য। যেমনটি আমি বলেছিলাম, "ইউনিট পরীক্ষাগুলি ভালভাবে সাজানো উচিত"। তবে সদৃশ সমাধানের একাধিক উপায় রয়েছে। একটি, যেমন আপনি উল্লেখ করেছেন, একটি ইউনিট পরীক্ষা করা হ'ল যা প্রথমে পরীক্ষার অধীনে কোডটি আহ্বান করে, এবং তারপরে একাধিকবার দৃser়তা জানায়। বিকল্পটি হল দৃশ্যের জন্য একটি নতুন "পরীক্ষার স্থিরতা" তৈরি করা, যা একটি প্রাথমিক / সেটআপ ধাপের সময় পরীক্ষার অধীনে কোডটি আহ্বান করে এবং তারপরে একটি ইউনিট পরীক্ষার একটি সিরিজ থাকে যা কেবল দৃ simply়ভাবে দাবি করে।
জে বাজুজি

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

7

আপনি যা যা করছেন তা হচ্ছে পরীক্ষার অধীনে শ্রেণীর আচরণগুলি বর্ণনা করা।

  1. প্রত্যাশিত আচরণগুলির যাচাইকরণ।
  2. ত্রুটির ক্ষেত্রে যাচাইকরণ।
  3. ক্লাসের মধ্যে সমস্ত কোড পাথের কভারেজ।
  4. ক্লাসের মধ্যে সমস্ত সদস্য ফাংশন অনুশীলন করা।

প্রাথমিক অভিপ্রায় শ্রেণীর আচরণের প্রতি আপনার আস্থা বাড়াতে।

আপনার কোডটি রিফ্যাক্টর করার সময় এটি বিশেষত কার্যকর। মার্টিন ফওলারের একটি আকর্ষণীয় নিবন্ধ রয়েছে নিজের ওয়েবসাইটে পরীক্ষার বিষয়ে ।

এইচটিএইচ।

চিয়ার্স,

রব


রব - যান্ত্রিক এটি ভাল, তবে এটি উদ্দেশ্যটি মিস করে। কেন আপনি এই সব করলেন? এইভাবে চিন্তা করা অন্যকে টিডিডির পথে নামতে সহায়তা করতে পারে।
মার্ক লেভিসন

7

পরীক্ষাটি মূলত ব্যর্থ হওয়া উচিত। তারপরে আপনার কোডটি লিখতে হবে যা এগুলি পাস করে, অন্যথায় আপনি এমন একটি পরীক্ষা লেখার ঝুঁকি চালান যা বাগড এবং সর্বদা পাস হয়।


@ রিজমো প্রতি সেয়ে একচেটিয়া নয়। সংজ্ঞায় কোয়ারারসোম এখানে যা লিখেছিল তা "টেস্ট ফার্স্ট" পদ্ধতিটির সাথে একচেটিয়া, যা টিডিডির একটি অংশ। টিডিডি রিফ্যাক্টরিংকেও আমলে নেয়। সর্বাধিক "স্মার্ট প্যান্ট" সংজ্ঞাটি পড়েছি তা হ'ল টিডিডি = টেস্ট ফার্স্ট + রিফ্যাক্টর।
স্পোইক

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

6

আমি উপরোক্ত প্রাগমেটিক ইউনিট পরীক্ষার বই থেকে ডান বিসিসিপি সংক্ষিপ্ত বিবরণ পছন্দ করি :

  • ঠিক : ফলাফল কি ঠিক ?
  • বি : সব হয় oundary অবস্থার সঠিক?
  • আমি : আমরা চেক করতে পারেন আমি সম্পর্ক nverse?
  • সি : আমরা পারি c রস-যাচাই ফলাফল অন্যান্য উপায়ে ব্যবহার করছেন?
  • : আমরা কি রয়ের শর্তগুলি জোর করতে পারি ?
  • পি : পি এরফর্মেশন বৈশিষ্ট্যগুলি কি সীমার মধ্যে রয়েছে?

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


6

ভাল পরীক্ষাগুলি রক্ষণাবেক্ষণযোগ্য হওয়া দরকার।

জটিল পরিবেশের জন্য এটি কীভাবে করা যায় তা আমি খুব একটা বুঝতে পারি নি।

আপনার কোড বেসটি কয়েক'শ 1000 বা কয়েক মিলিয়ন কোডের কোডগুলিতে পৌঁছতে শুরু করার সাথে সাথে সমস্ত পাঠ্যপুস্তক অনাবৃত হতে শুরু করে।

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

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

এখানেই আপনার ট্রেড-অফগুলির সাথে ডিল করতে শুরু করা হয়েছে:

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

আপনারও সিদ্ধান্ত নিতে হবে:

আপনি আপনার কোড বেসে পরীক্ষার কেসগুলি কোথায় সঞ্চয় করবেন?

  • আপনি কিভাবে আপনার পরীক্ষার কেস নথিভুক্ত করবেন?
  • পরীক্ষার কেস রক্ষণাবেক্ষণ সংরক্ষণের জন্য টেস্ট ফিক্সচারগুলি আবার ব্যবহার করা যেতে পারে?
  • একটি নাইট টেস্ট কেস কার্যকর করা ব্যর্থ হলে কী ঘটে? কে ট্রিজেস করে?
  • আপনি কীভাবে মোক বিষয়গুলি বজায় রাখবেন? আপনার যদি মক লগিং এপিআই এর নিজস্ব স্বাদ ব্যবহার করে 20 টি মডিউল থাকে তবে দ্রুত এপিআই রিপ্লেস পরিবর্তন করে। কেবল পরীক্ষার কেসগুলিই বদলে যায় না তবে 20 টি মক অবজেক্ট পরিবর্তন হয়। এই 20 টি মডিউলগুলি বহু বছর ধরে বিভিন্ন টিম লিখেছিল। এটি একটি ক্লাসিক পুনরায় ব্যবহারের সমস্যা।
  • ব্যক্তি এবং তাদের দলগুলি স্বয়ংক্রিয় পরীক্ষাগুলির মান বোঝে অন্য দল কীভাবে এটি করছে তা তারা পছন্দ করে না। :-)

আমি চিরকাল যেতে পারতাম, তবে আমার বক্তব্যটি হ'ল:

টেস্টগুলি রক্ষণাবেক্ষণযোগ্য হওয়া দরকার।


5

আমি এই নীতিগুলি কিছুক্ষণ আগে এই এমএসডিএন ম্যাগাজিন নিবন্ধে আবৃত করেছি যা আমি মনে করি যে কোনও বিকাশকারীকে পড়া গুরুত্বপূর্ণ is

আমি "ভাল" ইউনিট পরীক্ষার যেভাবে সংজ্ঞা দিচ্ছি তা হ'ল যদি তাদের নিম্নোক্ত তিনটি বৈশিষ্ট্য থাকে:

  • এগুলি পঠনযোগ্য (নামকরণ, সংস্থান, পরিবর্তনশীল, দৈর্ঘ্য, জটিলতা ..)
  • এগুলি রক্ষণাবেক্ষণযোগ্য (কোনও যুক্তি নয়, নির্দিষ্ট করে দেওয়া হয়নি, রাষ্ট্র-ভিত্তিক, রিফ্যাক্টর ..)
  • তারা বিশ্বাসযোগ্য (সঠিক জিনিস পরীক্ষা, বিচ্ছিন্ন, সংহতকরণ পরীক্ষা না ..)

রায়, আমি আন্তরিকভাবে একমত। এই জিনিসগুলি এজ কেভার কভারেজের চেয়ে অনেক বেশি গুরুত্বপূর্ণ।
ম্যাট হিনজে

বিশ্বাসযোগ্য - দুর্দান্ত পয়েন্ট!
রতকোক

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

2

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

আন্তরিক শুভেচ্ছা


1

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


1

আমি "একটি ট্রিপ" উত্তর দ্বিতীয়, এই পরীক্ষাগুলি একে অপরের উপর নির্ভর করা বাদে !!!

কেন?

DRY - নিজেকে পুনরাবৃত্তি করবেন না - পাশাপাশি পরীক্ষার ক্ষেত্রেও প্রযোজ্য! পরীক্ষার নির্ভরতা 1) সেটআপ সময় বাঁচাতে, 2) ফিক্সচার রিসোর্সগুলি সংরক্ষণ করতে এবং 3) ব্যর্থতার পয়েন্টপয়েন্টে সহায়তা করতে পারে। অবশ্যই, কেবলমাত্র আপনার পরীক্ষার কাঠামো প্রথম শ্রেণির নির্ভরতা সমর্থন করে। অন্যথায়, আমি স্বীকার করি, তারা খারাপ।

Http://www.iam.unibe.ch/~scg/Research/JExample/ অনুসরণ করুন


আমি তোমার সাথে একমত টেস্টএনজি হ'ল আরেকটি কাঠামো, যেখানে নির্ভরতা সহজেই অনুমোদিত হয়।
ডেভিড

0

প্রায়শ ইউনিট পরীক্ষাগুলি মক অবজেক্ট বা মক ডেটার উপর ভিত্তি করে। আমি তিন ধরণের ইউনিট পরীক্ষা লিখতে পছন্দ করি:

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

মোদ্দাটি হ'ল প্রতিটি ফাংশন পরীক্ষা করতে সক্ষম হওয়ার জন্য সবকিছুকে পুনরায় চালানো এড়ানো ।

  • আমি তৃতীয় ধরণেরটি প্রায়শই চালাই কারণ সমস্ত মক অবজেক্ট / ডেটা ইতিমধ্যে রয়েছে।
  • আমি যখনই আমার মডেল পরিবর্তন করি তখন আমি দ্বিতীয় ধরণের চালাই।
  • আমি বেসিক রিগ্রেশনগুলি একবারে একবারে একবারে খুব বেসিক ফাংশনগুলি যাচাই করার জন্য প্রথমটি চালিত করি।

0

2 ধরণের পরীক্ষার বিষয়ে চিন্তা করুন এবং তাদের সাথে অন্যরকম আচরণ করুন - কার্যকরী পরীক্ষা এবং পারফরম্যান্স পরীক্ষা।

প্রতিটি জন্য আলাদা ইনপুট এবং মেট্রিক ব্যবহার করুন। প্রতিটি ধরণের পরীক্ষার জন্য আপনার বিভিন্ন সফ্টওয়্যার ব্যবহার করতে হতে পারে।


তাহলে ইউনিট টেস্টিংয়ের কী হবে?
Spoike

0

আমি রায় ওশেরভের ইউনিট টেস্ট নামকরণের মান দ্বারা বর্ণিত একটি ধারাবাহিক পরীক্ষা নামকরণ কনভেনশন ব্যবহার করি একটি প্রদত্ত পরীক্ষার কেস শ্রেণীর প্রতিটি পদ্ধতিতে নীচের নামকরণ শৈলী মেথডুণ্ডারটেষ্ট_সেনারিও_অত্যাশিত ফলাফল রয়েছে has

    প্রথম পরীক্ষার নাম বিভাগটি পরীক্ষার অধীনে সিস্টেমে পদ্ধতির নাম।
    এর পরে পরীক্ষা করা হচ্ছে এমন নির্দিষ্ট দৃশ্যাবলী।
    অবশেষে সেই দৃশ্যের ফলাফল।

প্রতিটি বিভাগ উচ্চতর উটের কেস ব্যবহার করে এবং আন্ডার স্কোর দ্বারা সীমিত করা হয়।

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

পরীক্ষার অধীনে পদ্ধতিটি ওভারলোড করা না থাকলে আমি পদ্ধতিটির নামের সাথে পরামিতিগুলিও যুক্ত করি।

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