ইউনিট পরীক্ষাগুলিতে কেবল 'কার্যকরী' সফ্টওয়্যারটি আবরণ করা উচিত


9

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

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

এর উদাহরণ হ'ল;

var repositories = container.GetAllInstances<IEnvironmentRepository>();
Assert.AreEqual(1, repositories .Count());
foundInstances = foundInstances + repositories .Count();

নিম্নলিখিত ক্লাসের জন্য আমাদের 'ইউনিট পরীক্ষা' রয়েছে;

public MyClass(IEnvironmentRepository environmentRepository)
        {

        }

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

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

তাই বেশ কয়েকটি প্রশ্ন;

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

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

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

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

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

3
@ ক্রিসবিন্ট গুডনেস করুণাময় না, আমি নিজেই অনেকগুলি ধারক পরীক্ষাগুলি লিখেছি। তাদের অনেক মূল্য আছে, তারা কেবল ইউনিট পরীক্ষা নয়। এটি ঠিক আছে, ইউনিট পরীক্ষাগুলি পারে না এমন জিনিসগুলি ধরার জন্য ইন্টিগ্রেশন টেস্টগুলি অত্যন্ত মূল্যবান ।
ফোশি 21'17

উত্তর:


13

এটি একটি সঠিক বৈধ স্বয়ংক্রিয় পরীক্ষা আছে। তারা আপনার কোড বেসের কঙ্কালের উপাদানগুলির সাউন্ডনেসিটি যাচাই করার সাথে সাথে তাদের "আর্কিটেকচার টেস্টস" বলি।

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

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

তারা ইউনিট পরীক্ষা কিনা ... সম্ভবত না, তবে তারা এখনও বেশিরভাগ অংশের জন্য মেমরিতে পরিচালনা করে এবং বেশ দ্রুত চালায়। তারপরে আবার, আমি জানি না, ইউনিট পরীক্ষার সর্বজনস্বীকৃত সংজ্ঞা ছিল এমনটি নয়।


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

6

এই জাতীয় পরীক্ষার সমস্যা যেমন এটির প্রয়োজনের চেয়ে প্রোগ্রামটির অভ্যন্তরীণ পরীক্ষা করে। প্রোগ্রামটি প্রয়োজনীয় হিসাবে কাজ করলেও পরীক্ষাটি ব্যর্থ হতে পারে।

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

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

আরও ভাল স্বয়ংক্রিয় পরীক্ষা হ'ল প্রোগ্রামটি শুরু করা এবং এটি ক্রাশ হয়েছে কিনা তা দেখুন।

ইউনিট পরীক্ষাগুলির মধ্য দিয়ে গেলেও ইন্টিগ্রেশন বা ইউআই পরীক্ষায় আপনার এই ধরণের ত্রুটি ধরা উচিত।

এটি বলে যে, ধারক সেটআপের ক্রমবর্ধমান জটিলতা পাছার একটি ব্যথা। সম্ভবত কিছু 'খারাপ' পরীক্ষার পক্ষে এটি মূল্যবান।


1

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


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

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

2
ইউনিট পরীক্ষাগুলি নক করতে 10 মিনিট সময় নেয়। মোতায়েন হতে এক ঘন্টা সময় নিতে পারে।
ক্রিসবিন্ট

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

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

0

নির্ভরতা ইনজেকশন ধারকটির দায়িত্ব এক কার্যকারী অ্যাপ্লিকেশনে বিভিন্ন মডিউল আটকানো

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

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

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

যদি ইন্টিগ্রেশন পরীক্ষার কেসগুলি কিছু নির্দিষ্ট নির্ভরতার তাত্ক্ষণিকরণকে কভার করে না - আপনি কেবল এ জাতীয় একটি যুক্ত করেন।

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


0

আইএমও, উত্তরগুলি হ'ল:

  1. এটি কী একটি বৈধ ইউনিট পরীক্ষা - আমরা আমাদের ধারকটির কনফিগারেশন পরীক্ষা করছি, কাঠামোগত কাজ করে না (তবে আমি ওভারল্যাপটি দেখতে পাচ্ছি)

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

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

    • না, এটি একটি নিখুঁত ইউনিট পরীক্ষা, কারণ আপনি নির্ভরতা উপহাস করে এবং মাইক্লাস লজিককে একটি বিচ্ছিন্ন উপায়ে পরীক্ষা করেন।

-1

UnitTest যাচাই আচরণ কাঙ্ক্ষিত একটি ইউনিট এর বিচ্ছেদ

এর মানে হল যে কোন ধরণের কনফিগারেশন হয় না সুযোগ UnitTests

তবুও আপনার কনফিগারেশনের জন্য স্বয়ংক্রিয় পরীক্ষা করা উচিত, তবে এগুলি ইউনিট টেস্ট নয় ...


আপনি ইউনিট সংজ্ঞা কোথায় পাচ্ছেন?
ক্রিসবিন্ট

আমি এক মত রায় Osherove মধ্যে Unittesting শিল্প একটি ইউনিট পরিবর্তনের একই কারণে যে (production-) কোড কোন খণ্ড হল:। আমি আমার পৃথিবীতে এটি সাধারণত একক শ্রেণি থেকে তিন বা পাঁচ পর্যন্ত অবধি থাকে ...
টিমোথি ট্রাকল

এটি পরীক্ষা করা হচ্ছে এমন উত্পাদন কোড।
ক্রিসবিন্ট

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