ইউনিট টেস্টিং - ডেটাবেস মিলিত অ্যাপ


15

ডাটাবেসের সাথে দৃ testing়ভাবে মিলিত এমন কোনও অ্যাপ্লিকেশনটির সাথে একীকরণ করা এমন একটি মডেল পরীক্ষার ইউনিটটিতে সেরা পদ্ধতির কী হবে?

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


1
আকর্ষণীয় যে কার্যকরভাবে "আপনার অ্যাপ কোডটি পুনরায় লিখুন" বলে যে উত্তরগুলি ভোট
পেয়েছে

উত্তর:


10

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

পরীক্ষার সময় কোনও কিছুর জন্য কেবল প্রোডাকশন ডাটাবেসে সংযুক্ত থাকবেন না!


1
ডিআই এবং যথাযথ অ্যাপ্লিকেশন ডিজাইনের সাহায্যে আপনার কোনও ডাটাবেস ছাড়াই পরীক্ষা করতে সক্ষম হওয়া উচিত --- আপনি যে মকটি ইনজেক্ট করেছিলেন তা ব্যাক-এন্ড ডাটাবেসের যথেষ্ট বিশদ উপহাস সরবরাহ করে।
পিটার কে।

4

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


2

মডেলটি কোনও (কংক্রিট) ডিবি নির্ভর করে না। যদি এটি কেবলমাত্র একটি বিমূর্ত ডিবি ("ইন্টারফেস" পড়ুন) জানেন যা মডেলটির হাতে দেওয়া হয় তবে আপনি ডিবিকে একটি মক অবজেক্টের সাথে প্রতিস্থাপন করতে পারেন ।

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


1

আমারও একই সমস্যা ছিল - আমার পরীক্ষার গ্যারান্টি দেওয়ার কোনও সম্ভাবনা ছিল না ডিবি মান রাখে। ভবিষ্যতে আমি যেমন অন্যান্য দাম পেতে।

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


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

0

"সেরা" বিষয়গত, তবে আপনি কেবল একটি পরীক্ষা ডিবি সংযোগ ব্যবহার করতে পারেন।

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


ইন্টিগ্রেশন টেস্ট হিসাবে ডাটাবেসে কাজ করে এমন একটি ফাংশন যা পরীক্ষা করে এমন ইউনিট পরীক্ষাগুলি বর্ণনা করা @ এমআরএফকে বেশ বিভ্রান্তিমূলক।
AD7six

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

0

আমি এই সমস্যাটি মোকাবিলা করার জন্য সিমফনি ১.৪ (পিএইচপি) এর জন্য একটি প্লাগইন তৈরি করেছি (অন্যদের মধ্যে)। এটি জ্যাঙ্গোর পরীক্ষার কাঠামো (পাইথন) পরিচালিত হওয়ার পরে মডেল করা হয়েছে : ফ্রেমওয়ার্কটি প্রতিটি পরীক্ষা শুরু হওয়ার আগে একটি পৃথক পরীক্ষামূলক ডাটাবেস তৈরি করে এবং পপুলেট করে এবং প্রতিটি পরীক্ষা শেষ হওয়ার পরে এটি পরীক্ষার ডাটাবেসটিকে ধ্বংস করে দেয়।

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

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

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

উভয় পরীক্ষার ফ্রেমওয়ার্কে, ডাটাবেস অ্যাডাপ্টারটি বিদ্যমান ডেটাটিকে দূষিত হওয়া থেকে পরীক্ষার সঞ্চালন রোধ করতে "উত্পাদন" সংযোগের পরিবর্তে পরীক্ষা সংযোগটি ব্যবহার করতে কনফিগার করা হয়।


0

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

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

উদাহরণস্বরূপ, আপনার প্রয়োজনীয় কোডটিতে সরাসরি এসকিউএলকে ফেলে দেওয়ার পরিবর্তে কোনও পদ্ধতিতে কল করার উপায় রয়েছে যা এসকিউএল যা করে কেবল তা করে। ব্যবহার করুন Person.getPhoneNumber(), উদাহরণস্বরূপ, পরিবর্তে SELECT phone_number FROM person WHERE id = <foo>। এক নজরে এটি কেবল পরিষ্কার এবং সহজেই বোঝা যায় না, তবে পরীক্ষার সময় আপনি ব্যক্তি অবজেক্টকে বিদ্রূপ করতে পারেন যাতে ডাটাবেস স্পর্শ না করে getPhoneNumber()সর্বদা ফিরে আসে 555-555-5555বা কিছু something


0

জুনিটের সাথে সামান্য দীর্ঘ বাতাস বয়ে যাওয়া এটি মোটামুটি সহজ।

"সেটআপ" এর দ্বারা অস্থায়ী সারণীর একটি সেট সংজ্ঞায়িত করা এবং পপুলেশন করা উচিত।

তারপরে আপনি সমস্ত আপডেটের জন্য ইউনিট পরীক্ষাগুলি সম্পাদন করতে পারেন, কার্যকারিতা সন্নিবেশ করতে, মুছতে পারেন।

প্রতিটি পরীক্ষার জন্য আপনি নিজের আপডেট পদ্ধতিটি কল করেন তবে প্রত্যাশিত ফলাফল যাচাই করতে কিছু এসকিউএল চালান।

"টিয়ারডাউন" পর্যায়ে আপনি সমস্ত সারণী বাদ দিন।

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

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