কীভাবে একটি পরীক্ষা অন্য পরীক্ষার ফলাফলের উপর নির্ভর করে?


13

ধরা যাক একটি ইউটিলিটি ক্লাস রয়েছে যা আপনার কোডে অন্য অনেকগুলি ক্লাস দ্বারা সর্বত্র ব্যবহৃত কিছু সাধারণ স্থিতিশীল পদ্ধতি সরবরাহ করে।

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

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

আমি তাদের উভয়ের জন্য পরীক্ষা লিখেছি কিন্তু তাদের সাথে লিঙ্ক দেওয়ার একটি উপায় কি অন্য একটি পরীক্ষার ফলাফলের উপর নির্ভর করে একটি পরীক্ষা করা যায়?

আমি এর জন্য উপযুক্ত ট্যাগটি খুঁজে পাইনি তবে আমি ভিজ্যুয়াল স্টুডিওর ইউনিট পরীক্ষা ইঞ্জিনটি ব্যবহার করছি।


1
আমি বুঝতে পারি যে ইউটিলিটি ব্যর্থ হলে পার্সার সঠিকভাবে কাজ করে না। তবে আপনি যদি পরীক্ষা চালান তবে দেখবেন যে ইউটিলিটি পরীক্ষা ব্যর্থ হয়েছে। আপনি কেন অন্য পরীক্ষাগুলিও ব্যর্থ হতে চান?
ইউজেন মার্টিনভ

1
আমি এর আগে কারও কাছে এটি চাওয়া সম্পর্কে কখনও শুনিনি। আপনি কি অর্জন করতে চেষ্টা করছেন?
এসবেন স্কোভ পেডারসেন


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

3
@ t3chb0t আপনি যদি নিজের ইউটিলিটি কাজ করে তা নিশ্চিত করতে চান তবে আপনার ইউটিলিটি যাচাই করতে আপনাকে ইউনিট পরীক্ষা লিখতে হবে। ইউনিট পরীক্ষাগুলি পারমাণবিক হওয়া উচিত। আপনি কেবল কখনও তাদের চান যে কোনও একটি উপাদান পরীক্ষা করুন।
ম্যাপেল_শ্যাফট

উত্তর:


11

আপনার সিস্টেমের প্রতিটি ত্রুটি ঠিক একটি পরীক্ষায় বেড়াচ্ছে তা নিশ্চিত করার কোনও মানে নেই ।

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

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

অন্যথায়, আপনার পরীক্ষার স্যুটকে একটি সূচক হিসাবে তৈরি করার চেষ্টা করে বিরক্ত করবেন না যা সঠিকভাবে আপনাকে বলছে। এটি কখনই সঠিক হবে না এবং এটি হওয়ার কথাও নয়। দু'বার একই ভুল করা থেকে আপনাকে রক্ষা করার কথা, এটিই হ'ল।


8

এটি আপনার টুলিংয়ের উপর নির্ভর করে তবে আপনি সম্ভবত এটি করতে পারবেন না (এবং হওয়া উচিত নয়)

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

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

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

* একটি স্বয়ংক্রিয় বিল্ড বা পরীক্ষার স্ক্রিপ্টের সাহায্যে আপনি প্রথমে এই বিভাগটি চালাতে পারবেন, ফলাফলটি পরীক্ষা করুন এবং যদি এই প্রথম ব্যাচের পরীক্ষাগুলি পাস হয় তবে কেবল অন্য পরীক্ষাগুলি চালান run


5

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

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

আপনি ইউটিলিটিগুলি তাদের নিজস্ব সমাধানে স্থানান্তর করতে এবং আপনার বর্তমান প্রকল্পে এর ফলে প্রাপ্ত dll এর জন্য একটি রেফারেন্স যুক্ত করতে পারেন।


4

সংক্ষেপে আপনি সরঞ্জামগুলি / কৌশলগুলি যা ব্যবহার করতে চান তা ব্যতীত অন্য কিছু করার জন্য ব্যবহার করতে চান না।

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

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

কোনও পরীক্ষায় ব্যর্থ হলে আপনি এটি সেট করতে পারেন যাতে এটি আপনার কোড প্রকাশিত হতে না দেয়।


4

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

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

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

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

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

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

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

সুতরাং, আমি যা করি তা হ'ল আমি আমার পরীক্ষার ফোল্ডারগুলি (অর্থাত প্যাকেজগুলি) এর নাম নীচে রেখেছি:

t001_SomeSubsystem
t002_SomeOtherSubsystem
t003_AndYetAnotherSubsystem
...

এটি গ্যারান্টি দেয় যে "সোমারসুবসিস্টেম" এর সমস্ত পরীক্ষা "সামোথারস্বেস্ট সিস্টেম" এর জন্য সমস্ত পরীক্ষার আগেই কার্যকর করা হবে, যার ফলস্বরূপ "AndYetAnotherSubs systemm" এর জন্য সমস্ত পরীক্ষার আগেই মৃত্যুদন্ড কার্যকর করা হবে, এবং আরও অনেক কিছু।

একটি ফোল্ডারের মধ্যে পৃথক পরীক্ষার ফাইলগুলির নাম নীচে দেওয়া হয়:

T001_ThisTest.java
T002_ThatTest.java
T003_TheOtherTest.java

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


2
I don't know about everyone else, but I would prefer to have the freedom to try to do something in an odd way, and see for myself whether the results are better or worse++ সাথী। আমি জানি না যে সমাধানটি আমি পছন্দ করি তবে আপনি সেখানে যে মনোভাব প্রদর্শন করেছেন তা আমি পছন্দ করি।
রাবারডাক
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.