সঞ্চিত পদ্ধতিগুলির ইউনিট টেস্টিং


44

আমি এখন অনেক দিন ধরে এটি বিবেচনা করে আসছি।

প্রাথমিক প্রশ্নটি হল: কীভাবে ইউনিট পরীক্ষার সঞ্চিত পদ্ধতি?

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

এবং তারপরে ক্রমাগত ডেটা পরিবর্তন করার সমস্যাটি আসে। UPDATEমাত্র কয়েকটি সারি থেকে বেশিকে প্রভাবিত করার ক্ষেত্রে , প্রতিটি সম্ভাব্য প্রভাবিত সারি অবশ্যই পরীক্ষার ক্ষেত্রে কোনওভাবে অন্তর্ভুক্ত করতে হবে। DELETEএস এবং আরও কিছু নিয়ে আরও অসুবিধা ।

সুতরাং আপনি কীভাবে আপনার সঞ্চিত পদ্ধতিগুলি পরীক্ষা করবেন? জটিলতায় কি এমন একটা দালান রয়েছে যেখানে এটি সম্পূর্ণ নিরাশ হয়? রক্ষণাবেক্ষণের জন্য কোন সংস্থান দরকার?

আলেকজুজনসভের উত্তরের উপর ভিত্তি করে আরও একটি ছোট প্রশ্ন সম্পাদনা করুন: বা এমন কোনও গৃহপালিত রয়েছে যার নিচে এটি সম্পূর্ণ অকেজো?

উত্তর:


32

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

আমি বন্ধ করুন Lo শত্রুতাগুলি শিরোনামে একটি নিবন্ধ লিখেছি : ইউনিট টেস্টিং টি-এসকিউএল থেকে পাঠ , পাশাপাশি কিছু ব্লগ পোস্ট

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

রক্ষণাবেক্ষণকে সহজ করার জন্য, আমরা প্রত্যাশিত ফলাফল উত্পন্ন করি এবং আমরা সেগুলি পৃথক ফাইলে সংরক্ষণ করি - যা একটি বিশাল পার্থক্যের সৃষ্টি করে।


15

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

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

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

উচ্চ বা নিম্ন প্রান্তে কোনও জটিলতার প্রান্ত নেই যা আপনাকে পরীক্ষা বা ইউনিট পরীক্ষা থেকে বিরত রাখতে পারে। এই প্রশ্নগুলি বিবেচনা করুন:

  1. আপনি কি সবসময় বাগ ফ্রি কোড লেখেন?
  2. ছোট ইউনিট কি সর্বদা বাগ মুক্ত হয়?
  3. কোনও বৃহত্তর ইউনিটের জন্য বাগ থাকা ঠিক আছে কি?
  4. বিপর্যয়ের কারণ হতে কতটি বাগ লাগবে?

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

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

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

@ ডিজেসো এটি একটি দুর্দান্ত প্রশ্ন এবং একটি ধারণা যা ডেটাবেস বিশ্বে আরও অনেক বেশি এক্সপোজারের প্রয়োজন।
লেইফ রিফেল

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

@ জো ফিলিপস - এটি যা নিজের পছন্দ মতো কল করুন এটি নিশ্চিত করে যে এমন একটি প্রক্রিয়া যা সন্নিবেশ করিয়ে দেয় এবং কয়েকটি ট্রিগার চালিত করে তা স্বয়ংক্রিয় পরীক্ষার প্রয়োজন মনে করে যা এটি করে।
লেইফ রিফেল

8

PostgreSQL এর জন্য, pgTAP দেখুন :

পিজিটিএপি হ'ল ডাটাবেস ফাংশনগুলির একটি স্যুইট যা পিএইচকিএল স্ক্রিপ্ট বা এক্স ইউনাইট-স্টাইল পরীক্ষা ফাংশনগুলিতে ট্যাপ-নির্গমনকারী ইউনিট পরীক্ষাগুলি লিখতে সহজ করে।


ধন্যবাদ, ধন্যবাদ। কারও কি এর সাথে অভিজ্ঞতা আছে?
dezso

হ্যাঁ, আজকাল বেশ কয়েক জন লোক আপনার যদি প্রশ্ন থাকে তবে মেল তালিকায় সাবস্ক্রাইব করুন ।
তত্ত্ব

6

আপনি যদি এসকিউএল-এ সম্পূর্ণরূপে সম্পন্ন হওয়া সঞ্চিত পদ্ধতিগুলির পরীক্ষা করতে পছন্দ করেন তবে http://tsqlt.org/ এ একবার দেখুন

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

আপনাকে পুনরায় চালনযোগ্য টেস্ট স্যুট অর্জন করতে সহায়তা করার জন্য মক টেবিলগুলি এবং ভিউগুলি করার সুবিধা রয়েছে।

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