সমস্ত একক কার্যকর করা সমস্ত ইউনিট পরীক্ষা, বা তাদের বিভক্ত?


12

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

আমি যে কারণটি জিজ্ঞাসা করছি তার কারণ হ'ল আমি বর্তমানে আমি যে লাইব্রেরিতে কাজ করছি তা পরীক্ষা করতে CUnit ব্যবহার করছি। পরীক্ষাগুলি পৃথক স্যুইটে বিভক্ত হয় যা ব্যর্থতার জন্য মুদ্রিত আউটপুট সহ সম্পূর্ণ কার্যকর করা যায় into এখন, সেই লাইব্রেরির বিল্ড সিস্টেমটি সিএমকে (যা এর নাম সত্ত্বেও, সিউনিতের সাথে খুব কম সম্পর্কযুক্ত), এটি নিজস্ব পরীক্ষামূলক কাঠামো সিটিস্টের সাথে আসে । সিটিস্ট আমাকে এক্সিকিউটেবলের একটি তালিকা নিবন্ধ করার অনুমতি দেয় যা পরীক্ষার জন্য কাজ করে।

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

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


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

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

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

উত্তর:


5

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

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


ভাষা অজ্ঞাত যুক্তি একটি খুব ভাল বিষয়, যেহেতু আমি রাস্তায় লাইব্রেরির জন্য পাইথন বাইন্ডিংগুলি প্রয়োগ করার পরিকল্পনা করি। ধন্যবাদ!
বেনিয়ামিন ক্লোস্টার

@tdammers: কোন নির্দিষ্ট পরীক্ষার কাঠামো?
জেবিআরউইলকিনসন

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

2

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

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


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