উত্তর:
আপনার পরীক্ষাগুলি কীভাবে সংগঠিত হয় তা একেবারেই পাওয়ার গুরুত্বের তুলনায় গুরুত্বহীন।
ভাল পরীক্ষার স্যুটের জন্য সর্বাধিক গুরুত্বপূর্ণ বিষয় হ'ল এটি সমস্ত কার্যকারিতা কভার করে; এটি নিশ্চিত করে যে যখনই কোনও রিগ্রেশন ত্রুটি চালু হয়, আপনি ঠিক এখনই লক্ষ্য করবেন। প্রতিটি পদ্ধতির জন্য একটি পরীক্ষা লিখতে হবে কিনা, কোনও পদ্ধতির প্রতিটি ইনপুট মান সংমিশ্রণের জন্য একটি পরীক্ষা, বা সেই পদ্ধতির মধ্যে প্রতিটি সম্ভাব্য কোড পাথের জন্য একটি পরীক্ষাও কম গুরুত্বপূর্ণ। এই পরীক্ষাগুলি কয়েকটি বা অনেক পরীক্ষার শ্রেণিতে সংগঠিত করা কিনা আরও কম গুরুত্বপূর্ণ: একটি টেস্ট স্যুট সর্বদা পূর্ণরূপে সাফল্য লাভ করা উচিত, সুতরাং সতেরোটি পরীক্ষার মধ্যে তিনটি বা দু'এর মধ্যে কোনওটি ব্যর্থ হয় কিনা তা বিবেচ্য নয় - উভয়ই ভুল এবং অবশ্যই হতে হবে স্থির করেছি।
অবশ্যই, টেস্ট কোডটিও কোড, সুতরাং এটি রক্ষণাবেক্ষণযোগ্য, মডিউলার ইত্যাদির জন্য সাধারণ সর্বোত্তম অনুশীলনগুলি অনুসরণ করা উচিত তবে এটি পরীক্ষা স্যুট নিজেই কতটা রক্ষণাবেক্ষণযোগ্য তা দ্বারা সিদ্ধান্ত নেওয়া উচিত, পরীক্ষার ক্লাসগুলি কীভাবে সম্পর্কিত by তারা পরীক্ষা ক্লাস। আপনার উল্লিখিত দুটি নীতিই আপনাকে ধারাবাহিকভাবে অনুসরণ করলে জিনিসগুলি কোথায় খুঁজে পাওয়া যায় তা মনে রাখতে সহায়তা করতে পারে তবে তার জন্য নীতি নির্বাচনের চেয়ে ধারাবাহিকতা আরও গুরুত্বপূর্ণ।
আপনার নির্দিষ্ট প্রশ্নের জন্য, JUnit কনভেনশন, আপনার আবেদন শ্রেণি ( Foo1.java
, Foo2.java
) এবং JUnit পরীক্ষার ক্লাস ( Foo1Test.java
, Foo2Test.java
) এর মধ্যে 1: 1 চিঠিপত্র থাকতে হবে ।
এতে বলা হয়েছে, যে কোনও সাংগঠনিক প্রকল্পগুলি ব্যবহার করা যেতে পারে সে সম্পর্কে ইউনিট টেস্টিংয়ের চেতনা / লক্ষ্যগুলির গুরুত্বের চিত্র তুলে ধরার জন্য কিলিয়ানের আন্তরিকভাবে আমি সম্মত। আপনার কনভেনশনগুলিতে সতর্কতা অবলম্বন করা হয়, সতর্কতার সাথে আপনার সম্মেলনের ব্যতিক্রমগুলি মঞ্জুর করার সময় কয়েকটি কনভেনশন চয়ন করুন এবং তাদের সাথে বেশিরভাগ সময় লেগে থাকুন।
প্রতিটি পদ্ধতির জন্য পৃথক ক্লাস করা কি ভাল, বা প্রতিটি প্রকৃত শ্রেণির জন্য কেবল একটি পরীক্ষার ক্লাস রয়েছে?
যদি আপনার এক শ্রেণির পদ্ধতির জন্য পৃথক পরীক্ষার ক্লাস লেখার প্রয়োজন হয় তবে আপনার ভুল নকশা রয়েছে। পদ্ধতিগুলি ছোট, পড়তে সহজ, পরীক্ষার সহজ এবং পরিবর্তনের পক্ষে সহজ হওয়া উচিত। টেস্টডেটা, উপহাস ইত্যাদি তৈরির কারণে পরীক্ষাগুলি মূল কোডের চেয়ে কিছুটা দীর্ঘ হতে পারে তবে উল্লেখযোগ্যভাবে আর বেশি হওয়া উচিত নয়। যদি সেগুলি হয় তবে পরীক্ষার অধীনে আপনার শ্রেণিটি অত্যন্ত জটিল এবং একাধিক জিনিসের জন্য এটি নিশ্চিত করে ( একক দায়িত্বের নীতি ): আপনার নকশায় কাজ করুন।
আমি মনে করি "প্রতি পদ্ধতিতে একটি পরীক্ষার ক্লাস" এবং "প্রতি ক্লাসে একটি পরীক্ষার ক্লাস" উভয়ই খুব চরম হয়।
সাধারণভাবে, আপনি প্রতি পরীক্ষার পদ্ধতি / ইউনিট পরীক্ষার জন্য একটি চেক রাখতে চান। উদাহরণস্বরূপ, এগুলি এক list.isEmpty = true
এবং list.Length = 0
এক হিসাবে আচরণের জন্য এক পরীক্ষার পদ্ধতি / ইউনিট পরীক্ষা করে পরীক্ষা করার একাধিক জোর দেওয়া যেতে পারে ।
এটি আচরণের বর্ণনা দেয় এমন একটি পরীক্ষার পদ্ধতির নাম নিয়ে আসা সহজ করে তোলে। আপনি একটি পরীক্ষার ক্লাসে পরীক্ষার পদ্ধতিগুলি গোষ্ঠী করতে চান, সুতরাং যখন আপনি এটি পড়েন তখন test classname.test method
তা বোধগম্য হয়। সাধারণত, তাদের কিছু ভাগ করে নেওয়া সেটআপ কোড থাকে যা পরীক্ষার সেটআপ / ফিক্সচারে রাখা সহজ। পরীক্ষার অধীন শ্রেণীর উপর নির্ভর করে, এটি পুরো ক্লাসের জন্য একটি পরীক্ষার শ্রেণি হতে পারে এবং এটি একটি পদ্ধতির জন্য একটি পরীক্ষার শ্রেণিও হতে পারে। তবে সাধারণত এটি কোথাও কোথাও থাকবে।
সাধারণ কোড হিসাবে, আপনি পরীক্ষাগুলি যতটা সম্ভব পঠনযোগ্য থাকতে চান। আমার জন্য যেটি সহায়তা করে তা হ'ল বিডিডি প্রদত্ত-যখন-তখন বা অ্যারেস্ট-অ্যাক্ট-অ্যাড্রেস স্টাইল পরীক্ষার কোডটি সাজানোর। একটি পরীক্ষা ক্লাস যে দেওয়া থাকতে পারে, এটি সেটআপ। তারপরে, সেই শ্রেণীর প্রতিটি পরীক্ষার পদ্ধতি সেই প্রদত্ত (বা এর অংশ) ব্যবহার করে এবং তখন একটি এবং তখন একটি থাকে।
পরীক্ষার অধীনে শ্রেণীর কার্যকারিতা কীভাবে ব্যবহার করতে হবে সে সম্পর্কে দলিল হিসাবে ইউনিট পরীক্ষাগুলিও ভাবেন। ভাল ইউনিট পরীক্ষার মাধ্যমে, আপনি যে শ্রেণীরটি ব্যবহার করতে চান তার কার্যকারিতা কীভাবে ব্যবহার করতে হবে এবং এর ফলাফলগুলি ঠিক কী হবে তা জানতে আপনি পরীক্ষাগুলি পড়তে পারেন।
যখন কোনও কিছু ভেঙে যায় এবং ইউনিট পরীক্ষা ব্যর্থ হয়, আপনি কী চান তা বুঝতে এটি যতটা সম্ভব সহজ হতে চান, পরীক্ষার প্রতি একটি দৃser়তা এখানে অনেক সহায়তা করে। যখন একটি পরীক্ষায় একাধিক বক্তব্য থাকে, কেবলমাত্র প্রথমটি ব্যর্থ হয় এবং তারপরে পদ্ধতিটি প্রস্থান হয়, সুতরাং নিম্নলিখিত টেস্টগুলিতে পরীক্ষিত অন্যান্য আচরণটিও যদি আপনি প্রথমে দৃ fail়তা ব্যর্থ করে তোলে এমন জিনিস স্থির না করেন ততক্ষণ আপনি জানেন না। একটি দৃser়তার সাথে, আপনার অন্যান্য সমস্ত পরীক্ষার পদ্ধতিগুলি এখনও কার্যকর হয় এবং ব্যর্থতার গভীরতা বুঝতে এটি আরও দ্রুত।
অবশ্যই, আমি কিলিয়ান ফথের সাথে একমত: বাস্তবে, আপনি যে কোডটিতে কাজ করছেন তার জন্য কয়েকটি ইউনিট পরীক্ষা করা আপনার ভাগ্যবান হতে পারে। এবং কোনও ছোট স্থানীয়করণ পরীক্ষা মোটেও কোনও পরীক্ষার চেয়ে ভাল, বা বিল্ড সার্ভারে চালিত কেবলমাত্র বড় ইন্টিগ্রেশন টেস্টগুলি অনেক বেশি সময় নেয় এবং সাধারণত খুব স্থানীয় হয় না (ত্রুটি কোথায় তা তারা আপনাকে দ্রুত বলে না - আপনি 'এটিতে একটু কাজ করতে হবে)।
আমি মনে করি এটা ঠিক যে প্রতিটি শ্রেণীরই তার পরীক্ষার ক্লাস রয়েছে। ধারণাটি হ'ল একক পরীক্ষার ক্লাসে লক্ষ্য শ্রেণীর সাথে সম্পর্কিত সমস্ত ইউনিট পরীক্ষাকে কেন্দ্রীভূত করা। তারপরে, উদাহরণস্বরূপ, MyClass.java
এর পরীক্ষার শ্রেণি কল করা হবে MyClassTest.java
।