ইউনিট-টেস্ট এবং ডাটাবেস: আমি আসলে কোন সময়ে ডাটাবেসের সাথে সংযুক্ত থাকি?


37

পরীক্ষার ক্লাসগুলি কীভাবে কোনও ডাটাবেসের সাথে সংযুক্ত হয় সে সম্পর্কে প্রশ্নের উত্তর রয়েছে, যেমন "পরিষেবা পরিষেবা ক্লাসগুলি সংযুক্ত করা উচিত ..." এবং "ইউনিট টেস্টিং - ডাটাবেস মিলিত অ্যাপ্লিকেশন"

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

সুতরাং কোন পর্যায়ে আমাকে বলতে হবে "এখানে আমি একটি ডাটাবেস থেকে ডেটা আনছি এবং এই কোডের টুকরোটির জন্য আমি ইউনিট পরীক্ষা লিখব না"?

অন্য কথায়: কোথাও কোথাও কোথাও না কোনও ক্লাসে আমাকে অবশ্যই কল sqlDB.connect()করতে হবে বা অনুরূপ কিছু something আমি এই ক্লাসটি কীভাবে পরীক্ষা করব?

এবং এটি জিওআই বা একটি ফাইল সিস্টেমের সাথে মোকাবেলা করতে কোডের সাথে একই?


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

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


এটি আপনি যে ডাটাবেস সংযোগটি পরীক্ষা করছেন তা কি? মেমরি ডাটাবেসে একটি অস্থায়ী তৈরি করা (যেমন ডার্বি ) গ্রহণযোগ্য হবে?

@ মিশেলটি তবুও আমাকে অস্থায়ী প্রতিস্থাপন করতে হবে মেমরি ডিবিতে একটি বাস্তব ডাটাবেস দিয়ে। কোথায়? কখন? এটি ইউনিট কিভাবে পরীক্ষা করা হয়? অথবা এই কোডটি ইউনিট পরীক্ষা না করা ঠিক আছে কি?
TobiMcNamobi

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

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

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

উত্তর:


21

ইউনিট পরীক্ষার মূল বিষয় হল একটি শ্রেণি পরীক্ষা করা (আসলে এটি সাধারণত একটি পদ্ধতি পরীক্ষা করা উচিত )।

এর অর্থ হ'ল আপনি যখন ক্লাস পরীক্ষা করেন তখন আপনি Aএটিতে একটি পরীক্ষামূলক ডাটাবেস ইনজেক্ট করেন - স্ব-লিখিত কিছু, বা বজ্র-দ্রুত ইন মেমরি ডাটাবেস, যা কাজই পায়।

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

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


11

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

এখানে মূল কীটি অস্থায়ী বা কেবলমাত্র ডাটাবেসের পরীক্ষার জন্য পরীক্ষা করা এবং সেই পরীক্ষামূলক ডাটাবেস তৈরির জন্য হালকাতমতম প্রারম্ভিক প্রক্রিয়া হওয়া।

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

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

কিছু অতিরিক্ত রেফারেন্স।

http://en.wikipedia.org/wiki/Test_fixture

http://phpunit.de/manual/3.7/en/database.html

http://book.cakephp.org/2.0/en/development/testing.html#fixtures


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

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

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

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

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

4

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

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

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


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

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

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


2

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

শব্দার্থবিজ্ঞানের কথা বাদ দিলে, এটি উপকারী কারণগুলির একটি অগণিত কারণ রয়েছে:

  • টেস্টগুলি প্রস্থের আদেশগুলি দ্রুত চালায়
  • প্রতিক্রিয়া লুপ তাত্ক্ষণিক হয়ে যায় (উদাহরণস্বরূপ, টিডিডির জন্য <1s প্রতিক্রিয়া)
  • সিস্টেমগুলি বিল্ড / মোতায়েনের জন্য সমান্তরালভাবে চালানো যেতে পারে
  • পরীক্ষাগুলি চলতে কোনও ডাটাবেসের প্রয়োজন হয় না (বিল্ডটি আরও সহজ করে তোলে বা কমপক্ষে দ্রুততর করে তোলে)

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

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

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

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

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

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

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


1

টেমপ্লেট পদ্ধতি প্যাটার্ন সাহায্য করতে পারে।

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

এইভাবে ডাটাবেসে আসল কলগুলি কখনই ইউনিট পরীক্ষার অধীনে থাকে না, এটি ঠিক। তবে কোডের এই কয়েকটি লাইনই এটি। এবং এটি গ্রহণযোগ্য।


1
আপনি যদি ভাবছেন যে আমি কেন আমার নিজের প্রশ্নের উত্তর দিচ্ছি: হ্যাঁ, এটি একটি উত্তর হতে পারে তবে আমি সঠিকভাবে এটির বিষয়ে নিশ্চিত কিনা।
TobiMcNamobi

-1

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

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