টিডিডি মক কল যাচাইকরণ - এটি কি কোনও অ্যান্টি-প্যাটার্ন?


11

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


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

@ কেমোদা আমি এটির প্রশংসা করব যদি আপনি আমাকে এই বিষয়ে কোনও আলোচনার বা আরও কিছু উপাদানের সাথে লিঙ্ক করতে পারেন তবে আমি আমার কৌশলগুলি উন্নত করতে চাই।
দিমিতর দিমিত্রভ

1
আপনার কাছে এটি উদাহরণস্বরূপ আছে প্রোগ্রামার্স.স্ট্যাকেক্সেঞ্জার.কম
সেকশনস

উত্তর:


8

ঠিক আছে, আপনার ইনপুট এবং আউটপুট পরীক্ষা করার চেষ্টা করা উচিত। আপনার বাহ্যিক দৃশ্যমান আচরণ যাচাই করা উচিত। আপনার শ্রেণি যে "প্রতিশ্রুতি" বা "চুক্তি" করে।

একই সময়ে কখনও কখনও আপনি যা বলেছিলেন তা করার চেয়ে কোনও পদ্ধতি পরীক্ষা করার সর্বোত্তম উপায় নেই।

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


2

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

সুতরাং উদাহরণস্বরূপ যদি আপনার পরিষেবাদি ভান্ডারটিতে কিছু যুক্ত করে, আপনার পরীক্ষা করা উচিত যে পরে নতুন এন্ট্রিটি সংগ্রহস্থলটিতে রয়েছে এবং অ্যাড ক্রিয়াটি ট্রিগার করা নয়।

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


"তবে তবে যদি পরীক্ষায় প্রকৃত বাস্তবায়নগুলি ব্যয়বহুল হয় (উদাহরণস্বরূপ যেহেতু তাদের উত্স প্রয়োজন যা সেট আপ করা জটিল) তবে এই ক্ষেত্রে আমাকে মক ব্যবহার করা উচিত, তাই না?"

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

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


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

2

আমার চিন্তাভাবনা আবার: 'সামগ্রিক পরিষেবা' '

কল যাচাইকরণ এটি করবে, তবে বেশি মান প্রদান করবে না। আপনি কেবল আপনার তারগুলি পরীক্ষা করছেন।

এখানে 3 টি, অ-একচেটিয়া, অন্যান্য উপায় রয়েছে:

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

  2. সম্মিলিত পরিষেবাগুলি থেকে সরাসরি পরিষেবাটি তৈরি করতে কোড প্রজন্ম ব্যবহার করুন।

  3. একই জিনিসটি করতে কিছু ধরণের প্রতিবিম্ব বা গতিশীল ভাষা ব্যবহার করুন। উদাহরণস্বরূপ, জাভাতে, গ্রোভি ইন্টারফেস ব্যবহার করা সম্ভব হতে পারে, যা সরাসরি কলটি পাস করে।

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

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