ইউনিট টেস্টিং অ্যান্টি-প্যাটার্ন ক্যাটালগ


203

অ্যান্টি-প্যাটার্ন : একটি সাধারণ খারাপ অভ্যাস, খারাপ অভ্যাস বা খারাপ ধারণা থেকে প্রকৃত বিরোধী-প্যাটার্নকে আনুষ্ঠানিকভাবে আলাদা করতে কমপক্ষে দুটি মূল উপাদান উপস্থিত থাকতে হবে:

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

আপনি "বুনোতে" একবারে খুব বেশি দেখেছেন এমন টিডিডি অ্যান্টি-প্যাটার্নের পক্ষে ভোট দিন।
জেমস কারের ব্লগ পোস্ট এবং টেস্টড্রাইভ ডেভেলপমেন্ট ইয়াহুগ্রুপ সম্পর্কিত সম্পর্কিত আলোচনা

যদি আপনি একটি 'নামবিহীন' একটি .. পোস্ট 'ইমামও খুঁজে পান। অ্যান্টি-প্যাটার্ন প্রতি একটি পোস্ট দয়া করে কোনও কিছুর জন্য ভোট গণনা করুন।

আমার নিযুক্ত আগ্রহটি শীর্ষ-এন সাবসেটটি সন্ধান করা যাতে আমি অদূর ভবিষ্যতে একটি লাঞ্চবক্সের মিলনে তাদের নিয়ে আলোচনা করতে পারি।


হারুন, আপনি এটিকে পুরোপুরি মনে করছেন :) ট্যাগ-লাইনগুলি বা স্লোগানগুলিকে মন্তব্য হিসাবে যুক্ত করা ভাল ধারণা হবে যাতে আমরা কম স্ক্রোলিং করতে পারি .. কী বলবে?
গিশু

1
এটি বরং ভাল আসছে .. ধন্যবাদ বলছি n gals। আসুন তাদের রাখুন .. সবচেয়ে তথ্যবহুল এসও পোস্টগুলির মধ্যে একটি আইএমএইচও
গিশু

2
+1 এই থ্রেড ভালবাসা !!! এবং এগুলির বেশিরভাগই সত্য এবং প্রবল!
চিআই

দুর্দান্ত থ্রেড, কেন এই সম্প্রদায়টি উইকি ???
কুইবলসোম

2
কোজ এটি এক ধরণের পোল - আপনি ফসল কাটাতে চান না কেবল কোজ আপনি সর্বাধিক সাধারণ বিরোধী ধরণের পোস্ট করেছেন;)
গিশু

উত্তর:


70

দ্বিতীয় শ্রেণির নাগরিক - পরীক্ষার কোডটি প্রচুর পরিমাণে নকল কোড সম্বলিত উত্পাদন কোডের মতো পুনরুদ্ধার করা হয় না, পরীক্ষা চালিয়ে যাওয়া শক্ত করে তোলে।


67

ফ্রি রাইড / পিগব্যাক - জেমস ক্যার, টিম অ্যাটঞ্জার অন্য / স্বতন্ত্র বৈশিষ্ট্য / কার্যকারিতা
পরীক্ষা করার জন্য একটি নতুন পরীক্ষার কেস পদ্ধতি লেখার পরিবর্তে একটি বিদ্যমান পরীক্ষার ক্ষেত্রে একটি নতুন দৃ (়তা (এবং এর সাথে সম্পর্কিত ক্রিয়াকলাপগুলি (এএএ থেকে আইন পদক্ষেপ)) চালনা করে ।


15
হ্যাঁ, এটি আমার প্রিয়। আমি সব সময় এটা। ওহ ... অপেক্ষা করুন ... আপনি বলেছিলেন যে এটি খারাপ জিনিস ছিল। :-)
নির্দেশিকা

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

2
@ রেয়েডওয়াল্ড - সময়ের সাথে সাথে পরীক্ষার নামটি তার পরীক্ষা করা সমস্ত জিনিসের সাথে আর মেলে না। আন্তঃজাগরণ পরীক্ষার কারণে আপনার কিছু ছোঁড়াছুড়িও রয়েছে; একটি ব্যর্থতা ব্যর্থতার সঠিক কারণটি নির্দেশ করে না। উদাহরণস্বরূপ, এই পরীক্ষার একটি প্রামাণ্য উদাহরণটি সমস্ত সাজানো পদক্ষেপের ওপাক সুপারসেটের মতো এমন কিছু পড়তে পারে >> আইন >> দৃsert়তা যুক্ত করুন >> আরও কিছু আইন করুন >> আরও বিস্তৃত করুন >> আরও কিছু আইন করুন >> দৃ C.় সি এখন আদর্শভাবে যদি এ এবং সি হয় তবে ভাঙ্গা, আপনি 2 পরীক্ষা ব্যর্থতা দেখতে হবে। উপরের পরীক্ষার মাধ্যমে আপনি কেবল একটি দেখতে পাচ্ছেন, তারপরে আপনি এটিকে ঠিক করুন এবং পরের রানে, এটি আপনাকে জানিয়ে দেবে যে এখন সি ভাঙ্গা। এখন কল্পনা করুন 5-6 স্বতন্ত্র পরীক্ষাগুলি একসাথে
মিশ্রিত হয়েছে

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

"একটি ব্যর্থতা ব্যর্থতার সঠিক কারণটি নির্দেশ করে না" কোনও দৃ failure ়তা ব্যর্থতা কখনই ব্যর্থতার কারণ নির্দেশ করে না । এজন্য বাস্তবায়নের বিশদটি জানতে কিছু প্রয়োজন: একটি রিগ্রেশন ব্যর্থতার জন্য ডিবাগিং, কিছু টিডিডি কাজের জন্য আপনার বিকাশের রাষ্ট্র সম্পর্কে জ্ঞান।
রাইডওয়াল্ড

64

শুভ পথ

সীমানা এবং ব্যতিক্রম পরীক্ষা না করে পরীক্ষাটি সুখী পথে (অর্থাত্ প্রত্যাশিত ফলাফল) থাকে।

JUnit অ্যান্টিপ্যাটার্নস


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

59

স্থানীয় হিরো

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

লুকানো নির্ভরতা

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


দু: খজনকভাবে এটি অনেকবার প্রাচীন .dlls এর সাথে দেখা গেছে যা নিউবুলাস এবং বৈচিত্রপূর্ণ .ini ফাইলগুলির উপর নির্ভর করে যা কোনও প্রদেয় প্রোডাকশন সিস্টেমে ক্রমাগত সিঙ্কের বাইরে থাকে, সেই ডিএলগুলির জন্য দায়ী তিন বিকাশকারীদের সাথে বিস্তৃত পরামর্শ ছাড়াই আপনার মেশিনে ছাড়িয়ে যান। দীর্ঘশ্বাস.


এটি ডাব্লুওএমপিসি বিকাশকারী সংক্ষিপ্তসার একটি দুর্দান্ত উদাহরণ। "আমার পিসিতে কাজ করে!" (সাধারণত আপনার পিছনে টেস্টারদের নামতে বলা হয়))
জরিস টিমারম্যানস

58

চেইন গ্যাং

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

আপনি প্রায়শই এটি ডাটাবেস পরীক্ষায় দেখেন। রোলব্যাক ইন করার পরিবর্তে teardown(), পরীক্ষাগুলি ডাটাবেসে তাদের পরিবর্তনগুলি প্রতিশ্রুতিবদ্ধ। আর একটি সাধারণ কারণ হ'ল বৈশ্বিক রাষ্ট্রের পরিবর্তনগুলি চেষ্টা / শেষ অবধি ব্লকগুলিতে আবৃত হয় না যা পরীক্ষা ব্যর্থ হওয়া উচিত clean


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

56

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

সূত্র: জেমস কারের পোস্ট


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

@Spoike; আপনি যদি কোনও স্তরযুক্ত আর্কিটেকচারে থাকেন যা সত্যই শ্রেণীর ভূমিকার উপর নির্ভর করে; কিছু স্তর অন্যদের চেয়ে বেশি নির্ভরতা থাকে।
krosenvold

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

40

সাইলেন্ট ক্যাচার - কেলি?
একটি পরীক্ষা যা ব্যতিক্রম নিক্ষেপ করলে উত্তীর্ণ হয় .. এমনকি যদি ব্যতিক্রমটি প্রকৃতপক্ষে ঘটে থাকে তবে এটি বিকাশকারীদের উদ্দেশ্যটির চেয়ে আলাদা।
আরও দেখুন: সিক্রেট ক্যাচার

[Test]
[ExpectedException(typeof(Exception))]
public void ItShouldThrowDivideByZeroException()
{
   // some code that throws another exception yet passes the test
}

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

34

ইন্সপেক্টর
একটি ইউনিট পরীক্ষা যা ১০০% কোড কভারেজ অর্জনের প্রয়াসে এনক্যাপসুলেশন লঙ্ঘন করে তবে অবজেক্টে কী চলছে তা সম্পর্কে এতটুকু জানেন যে রিফ্যাক্টরের যে কোনও প্রচেষ্টা বিদ্যমান পরীক্ষাটি ভেঙে ফেলবে এবং ইউনিটে প্রতিবিম্বিত হওয়ার জন্য কোনও পরিবর্তন প্রয়োজন পরীক্ষা।


'আমি কীভাবে আমার সদস্য ভেরিয়েবলগুলি পাবলিক না করে পরীক্ষা করব ... শুধু ইউনিট-পরীক্ষার জন্য?'


2
কারণ: হোয়াইট-বক্স পরীক্ষার উপর অস্বস্তিকর নির্ভরতা। .NET এ প্যাক্সের মতো এই ধরণের পরীক্ষা করার সরঞ্জাম রয়েছে। রিফ্যাক্টরড সমাধান: পরিবর্তে আচরণের জন্য পরীক্ষা করুন এবং যদি আপনার সত্যিই সীমানা মানগুলি পরীক্ষা করতে হয় তবে স্বয়ংক্রিয় সরঞ্জামগুলি বাকীটি তৈরি করতে দিন।
স্পোইক

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

34

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


আমি বুঝতে পারি যে অত্যধিক পরীক্ষার সেটআপটি সাধারণত ক) নির্দেশিত হয়) দুর্বল কাঠামোগত কোড বা খ) অপর্যাপ্ত উপহাস, সঠিক?
টোফার হান্ট

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

32

অ্যানাল প্রোব

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

আপনি যদি এই প্যাটার্নটি দেখেন, পরীক্ষার অধীনে থাকা ক্লাসগুলি খুব বেশি ডেটা লুকিয়ে রাখে।

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


মাইকেল বর্গওয়ার্টের মন্তব্য: এটি আসলে পরীক্ষা-নিরীক্ষা নয়, কোডের পরীক্ষা-নিরীক্ষার ঘাটতিগুলি মোকাবেলা করা বাস্তববাদ। অবশ্যই এই ঘাটতিগুলি সমাধান করা ভাল, তবে তৃতীয় পক্ষের লাইব্রেরিগুলির ক্ষেত্রে এটি সম্ভব নাও হতে পারে।

অ্যারন দিগুল্লা: আমি একমত। সম্ভবত এই এন্ট্রিটি "জুনিট হাটো" উইকির পক্ষে এবং এন্টিপ্যাটার্নের জন্য না, সত্যিই আরও উপযুক্ত। মন্তব্য?


এটি কি পরিদর্শকের মতো নয়?
গিশু

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

2
এনপেলো: মাভেন 2 এর জন্য একটি প্লাগইন আছে, তাই না?
অ্যারন দিগুল্লা

1
এটি আসলে একটি পরীক্ষা প্রতিরোধী নয়, কোডটির পরীক্ষা করা হচ্ছে এমন ঘাটতিগুলি মোকাবেলা করা বাস্তববাদ। অবশ্যই এই ঘাটতিগুলি সমাধান করা ভাল, তবে তৃতীয় পক্ষের লাইব্রেরিগুলির ক্ষেত্রে এটি সম্ভব নাও হতে পারে।
মাইকেল বর্গওয়ার্ট 14

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

26

নাম নেই টেস্ট - নিক পেলো

যে পরীক্ষাটি বাগ ট্র্যাকারে একটি নির্দিষ্ট বাগের পুনরুত্পাদন করতে যুক্ত হয় এবং যার লেখক মনে করেন এটির নিজের কোনও নাম ওয়ারেন্ট দেয় না। বিদ্যমান, অভাবের পরীক্ষা বাড়ানোর পরিবর্তে, টেস্টফোর্ডবিউজি 123 নামে একটি নতুন পরীক্ষা তৈরি করা হয়।

দু'বছর পরে, যখন পরীক্ষাটি ব্যর্থ হয়, আপনাকে প্রথমে চেষ্টা করতে হবে এবং পরীক্ষার অভিপ্রায়টি বের করার জন্য আপনার বাগ ট্র্যাকারে BUG-123 খুঁজে বের করতে হবে।


7
আসলেই সত্য. থো যা "টেস্টমেথড" নামক একটি পরীক্ষার চেয়ে কিছুটা বেশি সহায়ক
নিকোলাইড্যান্ট

8
যতক্ষণ না বাগ্ট্র্যাকার পরিবর্তন হয় এবং আপনি পুরানো ট্র্যাকার এবং এর সমস্যা সনাক্তকারীগুলি আলগা করেন ... সুতরাং প্রকল্প -123 আর কোনও অর্থ রাখেনি ....
চিআই

25

স্লো পোকে

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

ওরফে টেস্টগুলি যেগুলি যতটা ঘন ঘন চালানো উচিত নয় frequently


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

এটি একটি সুস্পষ্ট প্রশ্ন তবে এটি ঠিক করার সর্বাধিক সাধারণ উপায়গুলি কী?
টোফার হান্ট

এটি প্রাথমিকভাবে উপকারী বলে মনে হচ্ছে, তাই না?
কেভ

1
@ টফারহান্ট সাধারণত পরীক্ষাগুলি ধীর হয় কারণ তাদের কিছু ব্যয়বহুল নির্ভরতা থাকে (যেমন ফাইল সিস্টেম, ডাটাবেস)। কৌশলটি হ'ল নির্ভরতা বিশ্লেষণ করা যতক্ষণ না আপনি সমস্যাটি দেখে থাকেন, তারপরে নির্ভরতাটিকে কলস্ট্যাকের উপরে চাপুন। আমি একটি কেস স্টাডি লিখেছিলাম যেখানে আমার ছাত্ররা তাদের ইউনিট-টেস্ট স্যুটটি to 77 সেকেন্ড থেকে 0.01 সেকেন্ডে তাদের নির্ভরতা স্থির করে নিয়েছে: github.com/ জোশচেক
জোশুয়া গাল

20

প্রজাপতি

আপনাকে এমন কিছু যাচাই করতে হবে যার মধ্যে ডেটা রয়েছে যা সারাক্ষণ পরিবর্তিত হয় এমন কাঠামোর মতো যা বর্তমান তারিখটি ধারণ করে এবং ফলাফলকে কোনও নির্দিষ্ট মান পর্যন্ত নিখুঁত করার কোনও উপায় নেই। কুৎসিত অংশটি হ'ল আপনি এই মানটির মোটেই পাত্তা দিচ্ছেন না। এটি কোনও মান যুক্ত না করে কেবল আপনার পরীক্ষাটিকে আরও জটিল করে তোলে।

এর ডানার ব্যাট বিশ্বের অন্যদিকে হারিকেন তৈরি করতে পারে। - এডওয়ার্ড লরেঞ্জ, বাটারফ্লাই এফেক্ট


এখানে অ্যান্টি-প্যাটার্নটি কী: এই জাতীয় পরীক্ষাটি দেখতে কেমন? কিছু ঠিক আছে? System.DateTime.Nowসহজ বা আরও বেশি ডিটারমিনিস্টিক ইউনিট পরীক্ষা করা ছাড়াও যেমন নির্ভরতা তৈরি করার জন্য কোড-আন্ডার-টেস্টের কোনও যুক্তিযুক্ত সুবিধা রয়েছে কি ?
মার্লিন মরগান-গ্রাহাম

1
জাভাতে, একটি উদাহরণ toString()হ'ল কোনও বস্তুর উপরে কল করা যা পদ্ধতিটি ওভাররাইট করে না। এটি আপনাকে সেই বস্তুর আইডি দেবে যা মেমরির ঠিকানার উপর নির্ভর করে। বা toString()অবজেক্টের প্রাথমিক কী রয়েছে এবং এটি প্রতিবার পরীক্ষা চালানোর সময় পরিবর্তিত হয়। এটি ঠিক করার জন্য তিনটি উপায় রয়েছে: ১. আপনি পরীক্ষা করছেন কোডটি পরিবর্তন করুন, ২. পরীক্ষার ফলাফলের পরিবর্তনশীল অংশগুলি সরাতে regexp ব্যবহার করুন বা ৩. সিস্টেমের পরিষেবাগুলিকে পূর্বাভাসযোগ্য ফলাফলগুলি ফিরিয়ে আনতে শক্তিশালী সরঞ্জামগুলি ব্যবহার করুন।
অ্যারন দিগুল্লা

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

19

ঝাঁকুনি পরীক্ষা (উত্স: রোমিলি ককিং)

এমন একটি পরীক্ষা যা মাঝে মাঝে নির্দিষ্ট সময়ে ব্যর্থ হয়, নির্দিষ্ট সময়ে নয় এবং সাধারণত পরীক্ষার মধ্যে বর্ণের অবস্থার কারণে হয়। সাধারণত জেএমএসের মতো অ্যাসিনক্রোনাস এমন কোনও কিছুর পরীক্ষা করার সময় সাধারণত ঘটে থাকে।

সম্ভবত ' অপেক্ষা করুন দেখুন ' অ্যান্টি-প্যাটার্ন এবং ' দ্য স্লিপার ' অ্যান্টি-প্যাটার্নের একটি দুর্দান্ত সেট ।

বিল্ড ব্যর্থ হয়েছে, ওহ, ঠিক আবার বিল্ড চালান। - বেনামে বিকাশকারী


@ স্টুয়ার্ট - অবশ্যই এটির বর্ণনা দেওয়ার একটি ভিডিও অবশ্যই "গাড়ি থামিয়ে দিয়েছে - এখনই চেষ্টা করুন!" ভিডিওসইফটি.ভিডিও / This এই প্যাটার্নটিকে "এখনই চেষ্টা করুন!", বা কেবল - "দ্য ফ্ল্যাচি টেস্ট" বলা যেতে পারে
এনপেলো

1
আমি একবার একটি PRGN এর জন্য একটি পরীক্ষা লিখেছিলাম যা সঠিক বিতরণ নিশ্চিত করেছিল। কখনও কখনও, এটি এলোমেলোভাবে ব্যর্থ হবে। চিত্রে যান. :-)
ক্রিস ভেস্ট

1
এটি কি ভাল পরীক্ষা হবে না? যদি কোনও পরীক্ষা কখনও ব্যর্থ হয় তবে আপনাকে সমস্যার উত্সটি খুঁজে বের করতে হবে। আমি কারও সাথে একটি পরীক্ষা নিয়ে যুদ্ধ করেছি যা 9 পি এবং মধ্যরাতের মধ্যে ব্যর্থ হয়েছিল। তিনি বলেছিলেন এটি এলোমেলো / মাঝে মাঝে ছিল। শেষ পর্যন্ত এটি সময় অঞ্চলগুলির সাথে সম্পর্কিত একটি বাগের সন্ধান করা হয়েছিল। চিত্রে যান.
ট্রেন্টন

@ ক্রিশ্চিয়ান ভেস্ট হানসেন: আপনি এটি বীজ করতে পারেন না?
অ্যান্ড্রু গ্রিম

@ ট্রেনটন এটি বিকাশকারীদের কেবল এটি উপেক্ষা করার পরিবর্তে (এটি বেশিরভাগ সময় পার হওয়ার সাথে সাথে তারা পালিয়ে যেতে পারে) কেবল এটি উপেক্ষা করার পরিবর্তে এটি ট্র্যাক করার জন্য বিরক্ত করা যেতে পারে তা কেবলমাত্র একটি ভাল পরীক্ষা।
শেপার্ড

19

অপেক্ষা কর এবং দেখ

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

সাধারণত, আপনি এটি দেখতে পাচ্ছেন যদি পরীক্ষার কোডটি টেস্ট করা হয় যা সিস্টেমের বাহ্যিক কোনও ইভেন্ট যেমন ইমেল, একটি http অনুরোধ বা ডিস্কে কোনও ফাইল লেখায়।

এই জাতীয় পরীক্ষাও স্থানীয় হিরো হতে পারে যেহেতু ধীর বাক্স বা একটি ওভারলোড হওয়া সিআই সার্ভারে চালিত হওয়ার পরে এটি কার্যকর হবে।

অপেক্ষা করুন এবং দেখুন অ্যান্টি-প্যাটার্নটিকে স্লিপারের সাথে বিভ্রান্ত করার দরকার নেই ।


হুম .. আচ্ছা আমি এরকম কিছু ব্যবহার করি। আমি কীভাবে মাল্টি-থ্রেড কোড পরীক্ষা করতে সক্ষম হব?
গিশু

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

@ গিশু কাউন্টডাউনল্যাচস, সেমোফোরস, কন্ডিশন বা এর মতো ব্যবহার করুন, থ্রেডগুলি পরের স্তরে যাওয়ার সময় একে অপরকে বলার জন্য।
ক্রিস ভেস্ট

একটি উদাহরণ: madcoderspeak.blogspot.com/2008/11/… মাতাল বোতাম evt। পর্যবেক্ষক বিরতিতে ভোটদান করছেন এবং পরিবর্তিত ইভেন্টগুলি উত্থাপন করছেন .. সেই ক্ষেত্রে আমি একটি বিলম্ব সংযোজন করি যাতে পরীক্ষার বাইরে যাওয়ার আগে ভোটের থ্রেডগুলি চালানোর সুযোগ পায়।
গিশু

আমার মনে হয় কার্টুনের লিঙ্কটি নষ্ট হয়ে গেছে।
অ্যান্ড্রু গ্রিম

17

অযৌক্তিকভাবে ভাগ করা ফিক্সচার - টিম ওটিঞ্জার
টেস্ট ফিক্সির বেশ কয়েকটি পরীক্ষার ক্ষেত্রে এমনকি সেটআপ / টিয়ারডাউন ব্যবহার বা প্রয়োজন হয় না। আংশিকভাবে বিকাশকারী জড়তার কারণে একটি নতুন পরীক্ষার স্থিরতা তৈরি হয়েছে ... গাদাটিতে কেবল আরও একটি পরীক্ষার কেস যুক্ত করা সহজ


1
এটিও হতে পারে যে পরীক্ষার অধীনে ক্লাসগুলি খুব বেশি করার চেষ্টা করছে।
মাইক দুই

16

দৈত্য

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

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


15

আমি যখন কিছু ফ্ল্যাশিং জিইআইআই দেখি তখন এটি বিশ্বাস করি যখন
তার জিইউআইয়ের মাধ্যমে অ্যাপ্লিকেশনটি পরীক্ষার সাথে একটি অস্বাস্থ্যকর স্থিরকরণ / আবেশ 'ঠিক একজন বাস্তব ব্যবহারকারীর মতো'

জিইউআইয়ের মাধ্যমে ব্যবসায়ের নিয়মগুলি পরীক্ষা করা কাপলিংয়ের একটি ভয়ানক রূপ। আপনি যদি জিইউআইয়ের মাধ্যমে কয়েক হাজার পরীক্ষা লিখে থাকেন এবং তারপরে আপনার জিইআইআই পরিবর্তন করেন, হাজার হাজার পরীক্ষা বিরতি।
বরং জিইআইআইয়ের মাধ্যমে কেবল জিইআইআই পরীক্ষা করুন এবং আপনি যখন এই পরীক্ষাগুলি চালাবেন তখন জিইআইআইকে আসল সিস্টেমের পরিবর্তে একটি ডামি সিস্টেমে জুটি দিন। GUI জড়িত না এমন একটি API এর মাধ্যমে ব্যবসায়ের নিয়মগুলি পরীক্ষা করুন। - বব মার্টিন

"আপনার অবশ্যই বুঝতে হবে যে দেখে বিশ্বাস করা হয়, তবে এটিও জানতে হবে যে বিশ্বাসী দেখছে।" - ডেনিস ওয়েটলি


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

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

3
এখানে মুল বক্তব্যটি হ'ল আপনার জিইউআই পরীক্ষা করা উচিত নয় বরং আপনি কেবল জিইউআইয়ের মাধ্যমে পরীক্ষা করা উচিত নয়। আপনি জিইউআই সহ 'হেডলেস' টেস্টিং করতে পারেন। জিইউআইকে যতটা সম্ভব পাতলা রাখুন - এমভিপির স্বাদ ব্যবহার করুন - আপনি এটির পরীক্ষা না করেও পালিয়ে যেতে পারেন। যদি আপনি দেখতে পান যে আপনার পাতলা জিইআইআই লেয়ারে সমস্ত সময় বাগের ফসল ছড়িয়ে পড়ে থাকে তবে এটি পরীক্ষাগুলি দিয়ে coverেকে রাখুন .. তবে বেশিরভাগ সময়, আমি এটিকে চেষ্টা করার মতো খুঁজে পাই না। জিইউআইয়ের 'ওয়্যারিং' ত্রুটিগুলি ঠিক করা সহজ হয় ...
গিশু

@ স্পাইক: গাইডেড ম্যানুয়াল টেস্টগুলি খারাপ নয়, বা ইউনিট পরীক্ষা নয় এমন স্বয়ংক্রিয় পরীক্ষার চালানোর জন্য junnit (বা অন্য কোনও ইউনিট পরীক্ষার কাঠামো) ব্যবহার করছে না। আপনার কেবল একই প্রকল্পে রাখা উচিত নয়, বা ইউনিট পরীক্ষার মতো তাদের ব্যবহার করা উচিত নয় (যেমন ক্রমাগত চালানো, বা প্রতিটি বিল্ড পরে)।
মার্লিন মরগান-গ্রাহাম

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

14

স্লিপার, ওরফে মাউন্ট ভেসুভিয়াস - নিক পেলো

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

'দ্য স্লিপার ' এন্টি-প্যাটার্নটির জন্য ' অপেক্ষা করুন এবং দেখুন ' নিয়ে বিভ্রান্ত হবেন না ।

সেই কোডটি 2000 সালের অনেক আগে প্রতিস্থাপন করা হবে অনেক - 1960 সালে অনেক বিকাশকারী


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

@ গিশু - +১। আমি একই ভাবছিলাম, কিন্তু দুজনের মধ্যে সিদ্ধান্ত নিতে পারিনি। এটিকে কিছুটা পরিষ্কার করার জন্য আমি শিরোনাম আপডেট করেছি;)
ডিসিপো

11

মৃত গাছ

এমন একটি পরীক্ষা যা একটি স্টাব তৈরি হয়েছিল, কিন্তু পরীক্ষাটি আসলে লেখা হয়নি।

আমি আসলে আমাদের প্রযোজনা কোডে এটি দেখেছি:

class TD_SomeClass {
  public void testAdd() {
    assertEquals(1+1, 2);
  }
}

আমি সে সম্পর্কে কী ভাবব তাও জানি না।


8
:) - প্রসেস কমপ্লায়েন্স ব্যাকডোর নামেও পরিচিত।
গিশু

1
আমাদের সম্প্রতি একটি পরীক্ষা এবং পদ্ধতি-আন্ডার-টেস্টে এর উদাহরণ রয়েছে যা বারবার রিফেক্টর হয়েছিল। কয়েকটি পুনরাবৃত্তির পরে, পরীক্ষাটি পদ্ধতি-আন্ডার-টেস্টের কল হয়ে যায়। এবং পদ্ধতিটি এখন অকার্যকর ফিরে আসার কারণে, জোর দেওয়ার কোনও দাবি ছিল না। সুতরাং মূলত, পরীক্ষাটি কেবল নিশ্চিত করেছিল যে পদ্ধতিটি কোনও ব্যতিক্রম ছুঁড়ে না ফেলে। এটি আসলে কার্যকর বা সঠিকভাবে কিছু করেছে কিনা তা বিবেচ্য নয়। আমি এটি কোড পর্যালোচনাতে পেয়েছি এবং জিজ্ঞাসা করেছি, "তাই ... আমরা এমনকি এখানে কী পরীক্ষা করছি?"
মারভো

11

আজ এই দ্বারা কিছুটা পেয়েছি:

ভেজা তল :
পরীক্ষাটি এমন ডেটা তৈরি করে যা কোথাও বজায় থাকে তবে পরীক্ষা শেষ হয়ে গেলে পরিষ্কার হয় না। এর ফলে পরীক্ষাগুলি (একই পরীক্ষা বা সম্ভবত অন্যান্য পরীক্ষাগুলি) পরবর্তী সময়ে ব্যর্থ হয় পরীক্ষার ।

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


ভেজা মেঝে এড়ানোর জন্য আপনি জুনিটের অস্থায়ী-ফোল্ডার-বিধিটি ব্যবহার করতে পারেন।
ডেভফার

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

11

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


10

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

[Test]
public void ShouldNotThrow()
{
   DoSomethingThatShouldNotThrowAnException();
}

2
এটি আসলে আমার মতে একটি বৈধ পরীক্ষা হতে পারে - বিশেষত একটি রিগ্রেশন পরীক্ষা হিসাবে।
ইলজা Preuß

দুঃখিত আবার এই নিরব ক্যাচারের সাথে বিভ্রান্ত হয়ে পড়ে ... ইউনিট পরীক্ষাগুলিতে 'এটি কাজ করা উচিত' বলার চেয়ে যা পরীক্ষা করা হচ্ছে সে সম্পর্কে স্পষ্টভাবে অভিপ্রায় প্রকাশ করা উচিত .. (+1 টিপি কিছু না করার চেয়ে কিছু ভাল e দেশ)
গিশু

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

4
কিছু ফ্রেমওয়ার্কের একটি Assert.DoesNotThrow(SomeDelegateType act)স্টাইল জোর দেওয়া থাকে যা বিশেষত এরকম ক্ষেত্রে ব্যবহৃত হতে পারে। আমি একটি পরীক্ষার কেস হওয়ার চেয়ে এই কম স্থূল খুঁজে পাই যা কোনও কনস্ট্রাক্টর নন-নাল ফেরায় যখন সফল হয় তবে কনস্ট্রাক্টর নিক্ষেপ করলে ব্যর্থ হয়। কোনও কনস্ট্রাক্টর কখনই শূন্য হয় না। (দ্রষ্টব্য: কেবলমাত্র সেই ভাষাগুলির ক্ষেত্রেই প্রযোজ্য যেখানে কোনও
নির্মাতাকে

10

পরিবেশগত ভাঙচুর

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

এই পরীক্ষাগুলি মাঝেমধ্যে হবে এবং বিকাশকারীদের 'কেবল আবার এটি চালান' বলে কিছু বলতে হবে।

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


@gcrain .. পরীক্ষা নিরস্তক হওয়া উচিত। আইএমওর আরও ভাল উপায় হবে পরীক্ষার আগে এবং পরে পরীক্ষা-নিরীক্ষার জন্য পরিষ্কার-পরিচ্ছন্নতার জন্য একটি 'সুপরিচিত-ইন-দ্য-দলে' বন্দর ব্যবহার করা যেমন এটি সর্বদা পাওয়া যায় ...
গিশু

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

10

টুরিং টেস্ট

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

হ্যালো বোকা। - নতুন শিক্ষানবিশ পর্যন্ত বিশ্বের স্মার্ট কম্পিউটার (পুরানো অ্যামিগা কমিক থেকে)।


10

চল্লিশ ফুটের মেরু পরীক্ষা

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


9

Doppelgänger

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

এই নিদর্শনটি একটি অস্বাস্থ্যকর পরিমাণে লুকানো নির্ভরতা নির্দেশ করে যা আপনি পরীক্ষা থেকে নিয়ন্ত্রণ করতে পারবেন না।

আমি তার মুখের দিকে তাকালাম ... আমার মুখ! এটি আয়নার মতো ছিল তবে আমার রক্ত ​​জমাট বাঁধল।


7

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

আমি জানি না এটি কী করে ... আমি যাইহোক, এটিকে যুক্ত করছি just - বেনামে বিকাশকারী


7

টেস্ট ইট অল

আমি বিশ্বাস করতে পারি না এটির এখনও অবধি উল্লেখ করা হয়নি, তবে পরীক্ষাগুলির একক দায়িত্বের নীতিটি ভঙ্গ করা উচিত নয় ।

আমি এগুলি বহুবার এসেছি, এই নিয়মকে ভঙ্গ করে এমন পরীক্ষাগুলি সংজ্ঞা দ্বারা বজায় রাখা একটি দুঃস্বপ্ন।


6

লাইন hitter

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

কভারেজ-বনাম-পৌঁছানো-কোড

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