আপনি যখন মক অবজেক্টগুলি ব্যবহার করেন তখন ইউনিট টেস্টগুলির সাথে নির্ভরতা সমস্যাগুলি কীভাবে সনাক্ত করবেন?


98

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

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

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

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



36
প্রস্তাবিত সমস্ত উত্তরের পাশাপাশি, আমাকে অবশ্যই বলতে হবে যে আমি নীচের বিবৃতিটি দিয়েছি: 'এটি কি কেবল আপনাকেই বলে যে যখন সমস্ত পরীক্ষা পাস হয়, আপনি একটি ব্রেকিং পরিবর্তন চালু করেননি?' আপনি যদি সত্যিই ভাবেন যে রিফ্যাক্টরিংয়ের ভয়কে অপসারণ করা খুব কম মূল্যহীন, আপনি
অবিস্মরণীয়

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

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

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

উত্তর:


125

আপনি যখন এ এর ​​জন্য ইউনিট পরীক্ষা লিখেন, আপনি এক্সকে উপহাস করেন

আপনি কি? আমি না, যদি না আমার একেবারে দরকার হয়। আমার যদি করতে হয়:

  1. X ধীর, বা
  2. X পার্শ্ব প্রতিক্রিয়া আছে

যদি এগুলির দুটিই প্রযোজ্য না হয় তবে আমার ইউনিট পরীক্ষাগুলিও পরীক্ষা Aকরবে X। অন্য কিছু করা এক অযৌক্তিক চরম পরীক্ষার বিচ্ছিন্নতা গ্রহণ করা হবে।

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

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


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

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

13
আপনি প্রশ্নের উত্তর না দিয়ে আলাদা ধরণের পরীক্ষার জন্য পরামর্শ দিচ্ছেন। যা একটি বৈধ পয়েন্ট, তবে এটি করার এটি একটি দুর্দান্ত আন্ডারহ্যান্ডড উপায়।
ফিল ফ্রস্ট

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

30
আমি @ ডেভিড আর্নো এর সাথে রয়েছি; আয়ান কুপারের এই আলোচনাটি দেখার পরে আমার পরীক্ষার কৌশলটি পরিবর্তিত হয়েছে: vimeo.com/68375232 । এটি একক বাক্যে সিদ্ধ করতে: ক্লাস পরীক্ষা করবেন না । টেস্ট আচরণে । আপনার পরীক্ষাগুলিতে পছন্দসই আচরণ বাস্তবায়নের জন্য অভ্যন্তরীণ ক্লাস / পদ্ধতিগুলি সম্পর্কে জ্ঞান থাকা উচিত নয়; তাদের কেবলমাত্র আপনার এপিআই / লাইব্রেরির সার্বজনীন পৃষ্ঠগুলি জানতে হবে এবং তাদের এটি পরীক্ষা করা উচিত। যদি পরীক্ষাগুলিতে খুব বেশি জ্ঞান থাকে তবে আপনি বাস্তবায়নের বিশদটি পরীক্ষা করে দেখেন এবং আপনার পরীক্ষাগুলি ভঙ্গুর হয়ে যায়, আপনার প্রয়োগের সাথে মিলিত হয়ে যায় এবং আসলে আপনার ঘাড়ে কেবল একটি অ্যাঙ্কর হয়ে থাকে।
রিচিবান

79

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

ধরা যাক আপনার ক্লাস এ আছে, এর জন্য সমস্ত পাথ সম্পূর্ণরূপে কভার করতে 10 ইউনিট পরীক্ষা প্রয়োজন। তারপরে আপনার আর একটি ক্লাস বি রয়েছে, কোডের মাধ্যমে এটি নিতে পারে এমন সমস্ত পাথ coverাকতে 10 ইউনিটের পরীক্ষাও প্রয়োজন। এখন আসুন আপনার আবেদনে বলি, আপনাকে A এর বি আউটপুট খাওয়াতে হবে এখন আপনার কোড এ এর ​​ইনপুট থেকে বি এর আউটপুট পর্যন্ত 100 টি বিভিন্ন পথ নিতে পারে

ইউনিট পরীক্ষা সহ, সমস্ত কেস সম্পূর্ণরূপে কভার করার জন্য আপনার কেবলমাত্র 20 ইউনিট পরীক্ষা + 1 ইন্টিগ্রেশন টেস্টের প্রয়োজন।

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

এখানে কেবল জেবি রেইনসবার্গার ইন্টিগ্রেটেড টেস্টগুলির উপর নির্ভর করার ডাউনসাইড সম্পর্কে খুব ভাল ভিডিও এখানে একটি স্ক্যাম এইচডি


1
আমি নিশ্চিত যে এটি কোনও কাকতালীয় ঘটনা নয় যে ইন্টিগ্রেশন পরীক্ষার কার্যকারিতা নিয়ে প্রশ্ন চিহ্নটি প্রতিটি আরও স্তরকে coveringাকা ইউনিট পরীক্ষার সাথে এক সাথে চলে গেছে।
রবি Dee

16
ঠিক আছে, তবে কোথাও আপনার 20 ইউনিট পরীক্ষার জন্য মশকরা প্রয়োজন। আপনার যদি A এর 10 টি পরীক্ষা থাকে যা সমস্ত A এর সাথে জুড়ে থাকে এবং আপনার 10 টি পরীক্ষা যা সমস্ত বি কভার করে এবং 25% A এর বোনাস হিসাবে পুনরায় পরীক্ষা করে থাকে এটি "সূক্ষ্ম" এবং একটি ভাল জিনিসের মধ্যে মনে হয়। বিএস পরীক্ষায় এটিকে উপহাস করা সক্রিয়ভাবে বোকা বলে মনে হয় (যদি না এ-তে আসলেই কারণ হওয়ার কারণ না থাকে যেমন উদাহরণস্বরূপ এটি ডাটাবেস বা এটি অন্যান্য বিষয়গুলির একটি দীর্ঘ ওয়েব নিয়ে আসে)
রিচার্ড টিঙ্গল ২:22

9
আপনি সম্পূর্ণ কভারেজ চাইলে একটি একক ইন্টিগ্রেশন টেস্টই যথেষ্ট তা এই ধারণার সাথে আমি একমত নই। আউটপুটের ভিত্তিতে আউটপুট কী হবে তা নিয়ে বি এর প্রতিক্রিয়াগুলি; যদি এ-তে কোনও পরামিতি পরিবর্তন করে এর আউটপুট পরিবর্তন হয়, তবে বি এটি সঠিকভাবে পরিচালনা করতে পারে না।
ম্যাথিউ এম।

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

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

72

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

ওহ, এক মুহুর্ত অপেক্ষা কর। এক্স ব্যর্থতার জন্য পরীক্ষার ফলাফলগুলি এর মতো চকচকে করা খুব গুরুত্বপূর্ণ।

যদি X এর প্রয়োগটি X 1 থেকে X2 এ পরিবর্তন করে X এর জন্য ইউনিট পরীক্ষাগুলি ভঙ্গ করে, তবে এটি ইঙ্গিত করে যে আপনি চুক্তিতে X এর পিছনে অসম্পূর্ণ পরিবর্তন করেছেন X

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

গভীর অন্তর্দৃষ্টিগুলির জন্য, পিটার হিনজেনস: সফ্টওয়্যার সংস্করণগুলির সমাপ্তি , বা রিচ হিকির সিম্পল মেড সহজ

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

পর্যালোচনা ইন্টিগ্রেটেড টেস্টগুলি একটি কেলেঙ্কারী ; উচ্চ স্তরে, আপনার কাছে এক্স 2 চুক্তি Xটি সঠিকভাবে প্রয়োগ করেছে এবং আপনার যতগুলি বিচ্ছিন্ন পরীক্ষা করা উচিত তা নিশ্চিত করার জন্য আপনার যতগুলি বিচ্ছিন্ন পরীক্ষা হবে তা এক্স এর কাছ থেকে আকর্ষণীয় প্রতিক্রিয়াগুলি দেওয়া উচিত, এবং এক্স 2 এর সাথে কী বোঝায় তা নিশ্চিত করার জন্য কয়েকটি ছোট সংখ্যক সংহত পরীক্ষাগুলি A

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

আমাদের একীকরণ পরীক্ষায় আরও ফোকাস করা উচিত নয়?

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

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


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

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

আমি মনে করি এটি সমস্ত সত্য, তবে যদি কোনও বাহ্যিক নির্ভরতা চুক্তিতে এক্সের পিছনে অসামঞ্জস্যপূর্ণ পরিবর্তনটি প্রবর্তন করে তবে এটি কীভাবে আমাকে সহায়তা করবে? সম্ভবত একটি লাইব্রেরিতে আই / ও-পারফর্মিং ক্লাসটি সামঞ্জস্যতা ভেঙে ফেলেছে এবং আমরা এক্সকে উপহাস করছি কারণ আমরা সিআই-তে ইউনিট পরীক্ষা ভারী I / O এর উপর নির্ভর করতে চাই না। আমি মনে করি যে ওপি এটির জন্য পরীক্ষা করার জন্য বলছে, এবং আমি বুঝতে পারি না এটি কীভাবে প্রশ্নের উত্তর দেয়। এই জন্য পরীক্ষা কিভাবে?
জীবাণু

15

এই প্রশ্নের মূল ভিত্তি ত্রুটিযুক্ত বলে আমি শুরু করি।

আপনি কখনই (বা উপহাস) বাস্তবায়ন পরীক্ষা করছেন না, আপনি ইন্টারফেস (এবং উপহাস) পরীক্ষা করছেন ।

যদি আমার কাছে এমন একটি বাস্তব শ্রেণি X থাকে যা ইন্টারফেস এক্স 1 প্রয়োগ করে, আমি একটি মক এক্সএম লিখতে পারি যা এক্স 1 এর সাথেও মেনে চলে। তারপরে আমার ক্লাস এটিকে অবশ্যই X1 প্রয়োগ করে এমন কিছু ব্যবহার করতে হবে যা দশম শ্রেণি বা মক এক্সএম হতে পারে।

এখন, ধরুন আমরা একটি নতুন ইন্টারফেস এক্স 2 কার্যকর করতে এক্স পরিবর্তন করেছি। ঠিক আছে, স্পষ্টতই আমার কোড আর সংকলন করে না। এ এর জন্য এমন কিছু দরকার যা এক্স 1 প্রয়োগ করে এবং এর আর অস্তিত্ব নেই। বিষয়টি চিহ্নিত করা হয়েছে এবং এটি ঠিক করা যেতে পারে।

ধরুন X1 এর পরিবর্তে পরিবর্তে, আমরা কেবল এটি সংশোধন করব। এখন ক্লাস এ সব সেট আছে। তবে মক এক্সএম আর ইন্টারফেস এক্স 1 প্রয়োগ করে না। বিষয়টি চিহ্নিত করা হয়েছে এবং এটি ঠিক করা যেতে পারে।


ইউনিট টেস্টিং এবং বিদ্রূপের পুরো ভিত্তিটি হ'ল আপনি এমন কোড লিখুন যা ইন্টারফেস ব্যবহার করে। একটি ইন্টারফেস একটি ভোক্তা গ্রাহ্য না করে কিভাবে কোড বাস্তবায়িত হয়, শুধুমাত্র সেই একই চুক্তি (ইনপুট / আউটপুট) সঙ্গীদেরকে করা হয়।

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


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

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

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

4
@ মার্ক অ্যামেরি: আমার মনে হয় না যে ভ্লাদ আপনি "ইন্টারফেস" শব্দটি ব্যবহার করছেন ঠিক একই অর্থে ব্যবহার করছেন; আমি উত্তরটি যেভাবে পড়েছি, এটি সংকীর্ণ সি # / জাভা অর্থে (যেমন পদ্ধতি স্বাক্ষরের একটি সেট) ইন্টারফেসের বিষয়ে কথা বলছে না তবে শব্দের সাধারণ অর্থে যেমন "অ্যাপ্লিকেশন প্রোগ্রামিং ইন্টারফেস" বা এমনকি "পদগুলিতে ব্যবহৃত হয়েছে" ব্যবহারকারী ইন্টারফেস". [...]
ইলমারি করোনেন

6
@ ইলমারি কারোনেন যদি ভ্লাদ সংকীর্ণ সি # / জাভা অর্থে না বলে "চুক্তি" বলতে "ইন্টারফেস" ব্যবহার করে থাকে তবে বিবৃতি "এখন, ধরুন আমরা একটি নতুন ইন্টারফেস এক্স 2 বাস্তবায়নের জন্য এক্স পরিবর্তন করেছি। ঠিক আছে, স্পষ্টতই আমার কোডটি আর সঙ্কলন করে না। " কেবল সাধারণ মিথ্যা, যেহেতু আপনি কোনও পদ্ধতির স্বাক্ষর না বদলে একটি চুক্তি পরিবর্তন করতে পারেন। কিন্তু সত্যি বলতে, আমি মনে করি এখানে সমস্যা যে Vlad যেকোন একটি ব্যবহার করে করা হয় না ধারাবাহিকভাবে অর্থ কিন্তু হয় conflating তাদের - যা কি দাবি করেন যে X1, চুক্তি কোন পরিবর্তনের অগত্যা ছাড়া একটি সংকলন ত্রুটি কারণ হবে পথ নিচে বাড়ে ঠাহর যে মিথ্যা ।
মার্ক আমেরিকা

9

আপনার প্রশ্নগুলি ঘুরে দেখা:

ইউনিট টেস্টিংয়ের তখন কী মান থাকে

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

এটি কি কেবল আপনাকে বলে যে সমস্ত পরীক্ষাগুলি পাস করার পরে, আপনি কোনও ব্রেকিং পরিবর্তন চালু করেননি

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

এবং যখন কিছু শ্রেণীর আচরণ পরিবর্তন হয় (স্বেচ্ছায় বা অনিচ্ছায়), আপনি কীভাবে সনাক্ত করতে পারেন (পছন্দমত একটি স্বয়ংক্রিয় পদ্ধতিতে) সমস্ত পরিণতি

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

আমাদের একীকরণ পরীক্ষায় আরও ফোকাস করা উচিত নয়?

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

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

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


9

এটাই সঠিক.

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

পুরো প্রয়োগটি কাজ করে তা পরীক্ষা করার জন্য ইউনিট পরীক্ষাগুলি নেই।

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

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

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

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


2

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

শ্রেণি আক্রমণকারী, পূর্বশর্ত এবং পোস্টের অবস্থার সমন্বয়ে আপনার যদি সত্যিকারের চুক্তি থাকে তবে নিম্ন স্তরের উপাদানগুলির চুক্তিতে উচ্চ স্তরের উপাদানগুলির নির্ভুলতা ভিত্তিক করে শ্রেণিবদ্ধভাবে যথাযথতা প্রমাণ করা সম্ভব। এটি চুক্তি অনুসারে নকশার পিছনে মৌলিক ধারণা।


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

7
@ রবিডি আমার ধারণা, তিনি বোঝাতে চেয়েছিলেন যে আপনি যখন পরীক্ষা করেন তখন আপনি প্রমাণ করেননি যে সত্যই এর যুক্তির ফ্যাক্টরিয়ালটি ফিরিয়ে fac(5) == 120দেয় নাfac() । আপনি কেবলমাত্র প্রমাণিত fac()হয়েছেন যে আপনি যখন প্রবেশ করবেন তখন পাঁচটির ফ্যাক্টরিয়াল ফেরত দেয় 5। এমনকি fac()এটিও নিশ্চিত নয় যে, 42তিম্বুক্টুতে মোট গ্রহগ্রহণের পরে প্রথম সোমবারের পরিবর্তে অনুমেয় ফিরে আসতে পারে ... এখানে সমস্যাটি হ'ল, আপনি পৃথক পরীক্ষার ইনপুটগুলি পরীক্ষা করে সম্মতি প্রমাণ করতে পারবেন না, আপনাকে সমস্ত সম্ভাব্য ইনপুটগুলি পরীক্ষা করতে হবে , এবং প্রমাণ করুন যে আপনি কোনওটি ভুলে যান নি (যেমন সিস্টেমের ঘড়িটি পড়া)।
সিমেস্টার

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

1
@ মাস্টার আপনি একটি পরীক্ষা এবং প্রমাণের মধ্যে পার্থক্যটি খুব ভালভাবে সংক্ষিপ্ত করেছেন। ধন্যবাদ!
ফ্র্যাঙ্ক হিলেমান

2

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

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

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

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


1

আমি আশা করি উভয় শিবিরের লোকেরা বুঝতে পারে যে শ্রেণি পরীক্ষা এবং আচরণের পরীক্ষাটি অরথোগোনাল নয়।

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

আচরণের পরীক্ষার জন্য, GWT কনস্ট্রাক্ট ব্যবহার করে শ্রেণি পরীক্ষার মধ্যে এটি করা পুরোপুরি সম্ভব।

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

সুতরাং, কোড বিরতি যখন করণীয়। যদি এটি কোনও ইন্টারফেসে কোড করে দেওয়া হয়, তবে কেবল কনক্রিটেশন পরিবর্তন করতে হবে (কোনও পরীক্ষার পাশাপাশি)।

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

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


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

0

এক্স এর ইন্টারফেসটি পরিবর্তিত না হলে আপনাকে এ এর ​​জন্য ইউনিট পরীক্ষা পরিবর্তন করতে হবে না কারণ এ সম্পর্কিত কোনও কিছুই পরিবর্তিত হয়নি। দেখে মনে হচ্ছে আপনি সত্যিই X এবং A এর একক পরীক্ষা লিখেছিলেন, তবে এটিকে A এর একক পরীক্ষা বলেছিলেন:

আপনি যখন এ এর ​​জন্য ইউনিট টেস্টগুলি লিখেন, আপনি এক্সকে উপহাস করেন other অন্য কথায়, ইউনিট এটিকে পরীক্ষা করার সময়, আপনি এক্স এর মকের আচরণটি এক্স 1 হিসাবে সেট (পোস্টুলেট) করেন।

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

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

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


এক্স যদি foobar থেকে foobarRandomNumber এ রিটার্নড অ্যারে ইনডেক্সের নাম পরিবর্তন করে দেয় তবে কীভাবে আমি এটি দিয়ে গণনা করতে পারি? আপনি যদি আমার বক্তব্যটি পান তবে এটি মূলত আমার সমস্যা, আমি একটি ক্লাসিক টাস্কের দ্বিতীয় নাম থেকে একটি ফিরে আসা কলামটির নাম দিয়েছি, তবে আমার পরীক্ষা কখনই জানতে পারবে না, কারণ এটি উপহাস করেছে। আমার ঠিক এমন এক অদ্ভুত অনুভূতি আছে যেন মন্তব্য করার আগে এই প্রশ্নের অনেকেই আসলে কখনও এরকম কিছু চেষ্টা করেননি
FantomX1

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

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

-2

আপনাকে বিভিন্ন পরীক্ষা দেখতে হবে।

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

একজন তার ইউনিট পরীক্ষার জন্য উচিত প্রকৃতপক্ষে উপহাস X এবং নকল সঙ্গে পরীক্ষা পাশ করার পরেও আপনি তা পরিবর্তন রাখা উচিত নয়।

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

এছাড়াও যদি এক্সের একটি নতুন আচরণের প্রয়োজন হয় তবে এটি একটি নতুন পদ্ধতি সরবরাহ করা ভাল যা পছন্দসই ফলাফল সরবরাহ করবে

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