কোনও অ্যাপ্লিকেশনটির সিআরইউডি স্তরে ইউনিট টেস্ট তৈরি করা, আমি কীভাবে পরীক্ষাগুলি স্বাধীন করতে পারি?


14

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

অ্যাড পদ্ধতির জন্য, আমাকে মূলত একটি ডামি অবজেক্ট তৈরি করতে হবে এবং এটি যুক্ত করতে হবে, তারপরে পরীক্ষাটি সফল হওয়ার পরে, আমাকে ডামি অবজেক্টটি মুছতে হবে।

এবং মোছার পরীক্ষার জন্য, অবশ্যই আমার একটি ডামি অবজেক্ট তৈরি করতে হবে যাতে আমি এটি মুছতে পারি।

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

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

এই জাতীয় মামলাগুলি কীভাবে পরিচালনা করা হয়?


আপনি এই প্রশ্নটি একবার দেখে
নিতেও পারেন

উত্তর:


13

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

এটি করার একটি দুর্দান্ত উপায় হ'ল মেমোরি ডাটাবেসের বিরুদ্ধে পরীক্ষা চালানো।

আপনার অ্যাড টেস্টে একটি খালি ডাটাবেস তৈরি করুন, অবজেক্টটি যুক্ত করুন এবং নিশ্চিত করুন যে এটি সত্যই যুক্ত হয়েছে।

আপনার মোছার পরীক্ষায় আপনি ইতিমধ্যে মুছে ফেলতে পারবেন এমন বস্তুর সাথে ডাটাবেস তৈরি করুন। অবজেক্টটি মুছুন এবং দৃsert়ভাবে বলুন যে এটি মুছে ফেলা হয়েছে।

আপনার টিয়ার-ডাউন কোডের ডেটাবেসটি উড়িয়ে দিন।


ইন-মেমরি ডাটাবেসটি কেবল দ্রুত (স্মৃতিতে) এবং সহজ (প্রক্রিয়াধীন)। আপনি যে কোনও ডেটা স্টোর দিয়ে এটি করতে পারেন।
পল ড্রাগার

3

লেনদেন ব্যবহার করুন।

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

হ্যাঁ, একটি অর্ডার বাতিল করতে আপনাকে প্রথমে একটি তৈরি করতে হবে। সেটা ঠিক আছে. পরীক্ষাটি প্রথমে একটি আদেশ তৈরি করবে, তারপরে এটি বাতিল করবে, তারপরে আদেশটি বাতিল হয়েছে কিনা তা যাচাই করুন।


এই ধারণাটি ভালবাসুন। এটি আজ দুর্দান্ত প্রভাব সহ কার্যকর করেছে।
পিমব্রউবারগুলি

3

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


2

সফ্টওয়্যার পরীক্ষার কৌশলগুলি অত্যন্ত বৈচিত্রপূর্ণ এবং এগুলি সম্পর্কে আপনি যত বেশি নিজেকে শিক্ষিত করবেন আপনি প্রচুর বিভিন্ন (এবং কখনও কখনও দ্বন্দ্বমূলক) দিকনির্দেশনা দেখা শুরু করতে যাচ্ছেন। যেতে কোনও একক 'বই' নেই।

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

  • প্রতিটি পরীক্ষা একা থাকা উচিত, এবং অন্যান্য পরীক্ষার দ্বারা প্রভাবিত হওয়া উচিত নয়
  • প্রতিটি ইউনিট পরীক্ষায় একটি জিনিস এবং কেবল একটি জিনিস পরীক্ষা করা উচিত
  • ইউনিট পরীক্ষাগুলি ডাটাবেসে আঘাত করা উচিত নয়

ইত্যাদি। এবং কীভাবে আপনি 'ইউনিট পরীক্ষার' সংজ্ঞা দেন তার উপর নির্ভর করে এগুলি সবই ঠিক ।

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

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

একটি ইন্টিগ্রেশন টেস্ট একাধিক উপাদান (যেমন একটি ইউজার ইন্টারফেস এবং একটি ডাটাবেস) ব্যবহার করে এমন কার্যকারিতা অনুশীলন করবে এবং ইউনিট পরীক্ষাগুলিতে যে নির্দেশিকা প্রয়োগ করা হবে তা অগত্যা ইন্টিগ্রেশন পরীক্ষার ক্ষেত্রে প্রযোজ্য নয়।

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

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


সুতরাং আপনি কি বলছেন যে আপনি ডাটাবেস থেকে মোছার পরীক্ষাটি একক করতে পারবেন না ?
ChrisF

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

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

1

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

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


1

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

তাই?

... এটি ইউনিট পরীক্ষার নির্দেশিকাগুলির বিরুদ্ধে যায় না?

না।

এই জাতীয় মামলাগুলি কীভাবে পরিচালনা করা হয়?

বেশ কয়েকটি পরীক্ষা স্বাধীন হতে পারে এবং একই বাগের কারণে সমস্ত ব্যর্থ হতে পারে। এটি আসলে স্বাভাবিক। প্রচুর পরীক্ষা - পরোক্ষভাবে - কিছু সাধারণ কার্যকারিতা পরীক্ষা করে। এবং সাধারণ কার্যকারিতাটি ভেঙে গেলে সমস্ত ব্যর্থ হয়। এতে কোনও ভুল নেই।

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


1

আপনি একটি মক ফ্রেমওয়ার্ক ব্যবহার করতে পারেন বা একটি মেমোরি ইন ডাটাবেস সহ একটি 'পরিবেশ' ব্যবহার করতে পারেন। শেষটি এমন একটি শ্রেণি যেখানে পরীক্ষা চালানোর আগে আপনি পরীক্ষা পাস করার জন্য প্রয়োজনীয় যা কিছু তৈরি করতে পারেন।

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


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