সিঙ্গল-অ্যাসেট ইউনিট টেস্টিং ডিআরওয়াই নীতিটি ভঙ্গ করে না?


12

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

তাহলে একক-জোর দেওয়া টেস্টিং ডিআরওয়াই লঙ্ঘন করে?

এবং পদ্ধতি অনুসারে কেবল একটি পরীক্ষা করার মতো একটি ভাল ভারসাম্য খুঁজে পাওয়ার জন্য কি কোনও নিয়ম অনুসরণ করা উচিত ? *

* আমি বুঝতে পারি যে সম্ভবত এটির কোনও এক-আকারের সমস্ত সমাধান ফিট করে না তবে এটির কাছে যাওয়ার কোনও প্রস্তাবিত উপায় আছে কি?


5
পদ্ধতিগুলিতে আপনার অনুলিপি করা কোডটি আপনি বের করতে পারেন
ইসমাইল বাদোয়া

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

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

@ ডেভহিলিয়ার হ্যাঁ, আমি আজ একটি নতুন শব্দ শিখেছি। ধন্যবাদ :)
কোরে হিন্টন

আপনি পরীক্ষায় প্রতি 1 টি দাবী কীভাবে ব্যাখ্যা করেন তার উপর নির্ভর করে, যদি আপনি একটি আসক্ত * কল বলতে চান তবে হ্যাঁ যদি আপনিও নিশ্চিত করতে চান যে আক্রমণকারীরা এখনও রয়েছেন (তবে এটি আবার কোনও পদ্ধতিতে বের করুন), অথবা যদি একাধিক প্রভাব রয়েছে যা আপনি কেবল পারেন ' একটি সিলেটের পরীক্ষায় (বা যদি আপনি তা করেন তবে এটি কেন ব্যর্থ হয়েছিল তা পরিষ্কার হয়ে উঠবে না)
রাচেট ফ্রিক

উত্তর:


14

যথাযথ ইউনিট পরীক্ষাগুলির একটি নামকরণের সম্মেলন রয়েছে যা আপনাকে অবিলম্বে যা ব্যর্থ হয়েছে তা সনাক্ত করতে সহায়তা করে:

public void AddNewCustomer_CustomerExists_ThrowsException()

এই কারণেই প্রতি পরীক্ষায় আপনার কাছে একটি দাবি রয়েছে, যাতে প্রতিটি পদ্ধতি (এবং এটির নাম) আপনি যে শর্তটি বলছেন তার সাথে মিল রাখে s

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

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


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

আপনার শেষ বিন্দুতে, আমি নিশ্চিত আমি পরীক্ষার কার্যকারিতার জন্য আমি চাই লিখতে পারে আছি পছন্দ কোড আছে, বরং কার্যকারিতা তুলনায় এটি প্রয়োজন
joelb

5

তাহলে একক-জোর দেওয়া টেস্টিং ডিআরওয়াই লঙ্ঘন করে?

না, তবে এটি লঙ্ঘনকে উত্সাহ দেয়।

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

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

যদি কোনও ফাংশন প্রদত্ত ইনপুটটির জন্য "foo" এবং "বার" এর একটি তালিকা ফেরত পাঠানোর কথা বলে মনে হয় তবে কোনও ক্রমে দুটি ফলই সেটটিতে রয়েছে কিনা তা পরীক্ষা করতে দুটি দৃ as় ব্যবহার করা পুরোপুরি ঠিক আছে। আপনি যখন সমস্যার মধ্যে পড়েছেন তখন যখন কোনও একক পরীক্ষা দুটি ইনপুট বা দুটি পার্শ্ব প্রতিক্রিয়া পরীক্ষা করে থাকে এবং আপনি জানেন না যে দুটির মধ্যে কোনটি ব্যর্থতার কারণ হয়েছিল।

আমি এটিকে একক দায়িত্বের নীতিতে ভিন্নতা হিসাবে দেখছি: কেবলমাত্র একটি বিষয় থাকা উচিত যা পরীক্ষায় ব্যর্থ হতে পারে এবং আদর্শ বিশ্বে পরিবর্তনের ফলে কেবল একটি পরীক্ষাই ভেঙে যায়।

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


1
পরীক্ষার জন্য, ডিআরওয়াই (বর্ণনামূলক এবং অর্থপূর্ণ বাক্যাংশ) এর চেয়ে ডিএএমপি হওয়া আরও গুরুত্বপূর্ণ important
Jörg ডব্লু মিটাগ

2

নাহয় এটি আপনি ঠিক করছেন এমনভাবে মনে হচ্ছে be যদি আপনি কোনও উল্লেখযোগ্য রেফারেন্স না পান তবে তারা দাবি করে যে এটি একটি ভাল অনুশীলন।

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

আপনার কোডটি কাঠামো করার জন্য আপনি সাধারণত পদ্ধতি ব্যবহার করুন। রিফ্যাক্টরিং টেস্টগুলি যখন সাধারণ টিডিডি রেড-গ্রিন-রিফ্যাক্টর প্রয়োগ করে না, পরিবর্তে প্রয়োগ করুন, "রেডে রিফ্যাক্টরিং"। এটাই,

  1. ইচ্ছাকৃতভাবে আপনার পরীক্ষা বিরতি,
  2. তোমার রিফ্যাক্টরিং কর
  3. আপনার পরীক্ষা ঠিক করুন

আপনি জানেন যে পরীক্ষাগুলি এখনও ইতিবাচক এবং নেতিবাচক ফলাফল দেয়।

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

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