বাস্তবায়নের বিশদে মিলিত না করে ইউনিট পরীক্ষার আচরণগুলি


16

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

save X to some data sourceপরিষেবাগুলির একটি সাধারণ সেট এবং সংগ্রহস্থলগুলির মতো সিস্টেমের মতো আচরণের ক্ষেত্রে, আমরা কীভাবে পরিষেবা স্তরের কিছু তথ্য সংরক্ষণের ইউনিটটি পরীক্ষার সাথে প্রয়োগের বিবরণে মিলিত না করে পরীক্ষা করতে পারি (নির্দিষ্ট পদ্ধতিতে কল করার মতো) )? এই ধরণের মিলন এড়ানো আসলে কোনওভাবেই চেষ্টা / খারাপের জন্য মূল্যহীন নয়?


1
আপনি যদি পরীক্ষা করতে চান যে তথ্যটি সংরক্ষণাগারে সংরক্ষিত হয়েছিল, তবে পরীক্ষায় আসলে গিয়ে তথ্য সংগ্রহস্থলটি পরীক্ষা করে দেখতে হবে যে তথ্য আছে কিনা, তাই না? নাকি আমি কিছু মিস করছি?

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

উত্তর:


8

আপনার নির্দিষ্ট উদাহরণটি এমন একটি ক্ষেত্রে যা আপনাকে সাধারণত কোনও নির্দিষ্ট পদ্ধতি বলা হয়েছিল কিনা তা পরীক্ষা করে পরীক্ষা করতে হয়, কারণ বাহ্যিক নির্ভরতারsaving X to data source সাথে যোগাযোগ করার অর্থ , তাই আপনাকে যে আচরণটি পরীক্ষা করতে হবে তা হ'ল যোগাযোগটি প্রত্যাশিতভাবে ঘটছে

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

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

পিএস: রাজ্য বা ইন্টারঅ্যাকশন দ্বারা পরীক্ষা করা যদি টিডিডির একমাত্র সত্য উপায় হয় তা বলার আমার উদ্দেশ্য নয় - আমি বিশ্বাস করি এটি সঠিক কাজের জন্য সঠিক সরঞ্জামটি ব্যবহার করার বিষয় বলে আমি বিশ্বাস করি।


আপনি যখন "বাহ্যিক নির্ভরতার সাথে যোগাযোগের" কথা উল্লেখ করেন, আপনি কি বহিরাগত নির্ভরতাগুলি হিসাবে চিহ্নিত করছেন যা পরীক্ষার অধীনে থাকা ইউনিটের বাহ্যিক বা সামগ্রিকভাবে সিস্টেমের বাহ্যিক?
অ্যান্ডি হান্ট

"বাহ্যিক নির্ভরতা" বলতে বোঝায় যে কোনও কিছুই আপনি আপনার অ্যাপ্লিকেশনটির প্লাগ-ইন হিসাবে বিবেচিত হতে পারেন। অ্যাপ্লিকেশন দ্বারা, আমার অর্থ ব্যবসায় বিধি, যে কোনও ধরণের বিশদ যেমন অধ্যবসায় বা UI এর জন্য কোন কাঠামো ব্যবহার করা উচিত ag আমি মনে করি চাচা বব আরও ভালভাবে এটি ব্যাখ্যা করতে পারেন, এই আলাপের মতো: youtube.com/watch?v=WpkDN78P884
মিশেলহেনরিচ

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

আমি বাস্তবায়নের সাথে মিলিত হচ্ছে এমন পরীক্ষাগুলির একটি বাস্তব-বিশ্বের উদাহরণ দেখতে চাই।
PositiveGuy

7

আমার এই আলাপটির ব্যাখ্যাটি হ'ল:

  • পরীক্ষার উপাদান, ক্লাস নয়।
  • তাদের ইন্টারফেস পোর্টগুলির মাধ্যমে পরীক্ষার উপাদানগুলি।

এটি আলোচনায় বর্ণিত হয়নি, তবে আমি মনে করি পরামর্শের জন্য অনুমান করা প্রসঙ্গটি হ'ল:

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

সুতরাং কোনও উপাদানটির পরীক্ষা করা হ'ল বৃহত্তম সম্ভাব্য সুযোগ যেখানে কোনও কিছুকে এখনও যুক্তিসঙ্গতভাবে ইউনিট টেস্টিং বলা যেতে পারে। কিছু লোক, বিশেষত শিক্ষাবিদরা এই শব্দটি কীভাবে ব্যবহার করেন তার থেকে এটি আলাদা। এটি আদর্শ ইউনিট পরীক্ষা সরঞ্জাম টিউটোরিয়ালের উদাহরণগুলির মতো কিছুই নয়। এটি হার্ডওয়্যার পরীক্ষায় এর উত্সটির সাথে মেলে; বোর্ড এবং মডিউলগুলি ইউনিট পরীক্ষিত, তার ও স্ক্রু নয়। বা কমপক্ষে আপনি স্ক্রু পরীক্ষা করার জন্য মক বোয়িং তৈরি করবেন না ...

এটি থেকে এক্সট্রোপোলেটিং এবং নিজের কিছু চিন্তাভাবনা ছুঁড়ে ফেলা,

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

আপনি যদি এটি সঠিকভাবে এবং পরিষ্কারভাবে করেন তবে আপনার সবেমাত্র একটি উপহাসের সরঞ্জাম প্রয়োজন; এটি প্রতি সিস্টেমের জন্য কয়েকবার ব্যবহৃত হয়।

একটি ডাটাবেস সাধারণত একটি সহযোগী হয়, তাই এটি উপহাসের পরিবর্তে নকল হয়ে যায়। এটি হাত দ্বারা প্রয়োগ করা বেদনাদায়ক হবে; ভাগ্যক্রমে এই জাতীয় জিনিস ইতিমধ্যে বিদ্যমান

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

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

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


আপনি কি ইন্টারফেস পোর্টের একটি দৃ concrete় উদাহরণ বর্ণনা / দিতে পারেন?
PositiveGuy

আউটপুট ইন্টারফেসের উদাহরণ কী। আপনি কোডে নির্দিষ্ট হতে পারেন? ইনপুট ইন্টারফেস একই।
PositiveGuy

একটি ইন্টারফেস (জাভা / সি # অর্থে) একটি পোর্টকে আবৃত করে, যা বাইরের বিশ্বের সাথে কথা বলার যে কোনও কিছুই হতে পারে (ডি / বি, সকেট, HT, ....)। আউটপুট ইন্টারফেস এমন একটি যা বহিরাগত বিশ্বের বন্দরের মাধ্যমে আসে কেবলমাত্র ব্যতিক্রম বা সমতুল্য ফেরতের মানগুলির সাথে কোনও পদ্ধতি নেই।
soru

একটি ইনপুট ইন্টারফেস বিপরীত, একজন সহযোগী ইনপুট এবং আউটপুট উভয়ই।
soru

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

0

আমার পরামর্শ হল একটি রাজ্য-ভিত্তিক পরীক্ষার পদ্ধতির ব্যবহার:

উপহার দিন আমাদের জানা অবস্থায় একটি পরীক্ষার ডিবি রয়েছে

যখন পরিষেবাটি আর্গুমেন্টের সাহায্যে বলা হয় এক্স

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

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

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

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