কখন মকিতো.ভারিফাই () ব্যবহার করবেন?


201

আমি 3 উদ্দেশ্যে জুনিত পরীক্ষার মামলাগুলি লিখি:

  1. আমার কোড সমস্ত (বা বেশিরভাগ) ইনপুট সংমিশ্রণ / মানগুলির অধীনে প্রয়োজনীয় সমস্ত কার্যকারিতাটি সন্তুষ্ট করে তা নিশ্চিত করার জন্য।
  2. আমি বাস্তবায়নটি পরিবর্তন করতে পারি এবং আমার সমস্ত কার্যকারিতা এখনও সন্তুষ্ট তা আমাকে জানাতে JUnit পরীক্ষার কেসের উপর নির্ভর করতে পারি তা নিশ্চিত করার জন্য।
  3. সমস্ত ব্যবহারের মামলার ডকুমেন্টেশন হিসাবে আমার কোড হ্যান্ডল করে এবং রিফ্যাক্টরিংয়ের জন্য একটি বিশেষ হিসাবে কাজ করে - কোডটি কখনও পুনরায় লেখার দরকার পড়ে। (কোডটি রিফ্যাক্টর, এবং আমার জুনিট পরীক্ষা যদি ব্যর্থ হয় - আপনি সম্ভবত কিছু ব্যবহারের ক্ষেত্রে মিস করেছেন) missed

কেন বা কখন Mockito.verify()ব্যবহার করা উচিত তা আমি বুঝতে পারি না । আমি যখন verify()ডাকা হচ্ছে দেখছি তখন এটি আমাকে বলছে যে আমার ইউএনইটি বাস্তবায়ন সম্পর্কে সচেতন হচ্ছে। (এইভাবে আমার বাস্তবায়ন পরিবর্তন করা আমার কাজগুলি ভেঙে দেবে, যদিও আমার কার্যকারিতা অকার্যকর ছিল)।

আমি খুজতেছি:

  1. এর যথাযথ ব্যবহারের জন্য গাইডলাইনগুলি কী হওয়া উচিত Mockito.verify()?

  2. পরীক্ষার অধীনে শ্রেণি বাস্তবায়নের বিষয়ে জুনিয়টদের সচেতন হওয়া বা শক্তভাবে মিলিত হওয়া কি মৌলিকভাবে সঠিক?


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

উত্তর:


78

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

এটি সূচিত করে যে ক্লাস এ এর ​​চুক্তিতে পর্যাপ্ত বিবরণ রয়েছে যা এটি টাইপ সি (যা একটি ইন্টারফেস বা শ্রেণি হতে পারে) সম্পর্কে কথা বলে। সুতরাং হ্যাঁ, আমরা স্পেসিফিকেশনের একটি স্তরের কথা বলছি যা কেবল "সিস্টেমের প্রয়োজনীয়তা" এর বাইরে চলে যায়, এবং বাস্তবায়ন বর্ণনা করার কিছুটা পথ যায়।

ইউনিট পরীক্ষার জন্য এটি স্বাভাবিক। আপনি যখন ইউনিট পরীক্ষা করছেন, আপনি নিশ্চিত করতে চান যে প্রতিটি ইউনিট "সঠিক জিনিস" করছে, এবং এটি সাধারণত অন্যান্য ইউনিটের সাথে এর ইন্টারঅ্যাকশন অন্তর্ভুক্ত করবে। এখানে "ইউনিট" এর অর্থ ক্লাস বা আপনার অ্যাপ্লিকেশনটির বৃহত্তর উপসর্গ হতে পারে।

হালনাগাদ:

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

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

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


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

@ রাসেল এমনকি "টাইপ সি" কোনও লাইব্রেরির আশেপাশের মোড়কের জন্য, বা আপনার অ্যাপ্লিকেশনটির কিছু পৃথক সাবসিস্টেমের ইন্টারফেস হলেও?
দাউদ ইবনে কেরেম

1
আমি বলতে চাই যে এটি উপ-সিস্টেম বা পরিষেবা চালু ছিল তা নিশ্চিত করা সম্পূর্ণ বেহুদা - কেবল তার আশেপাশে কিছু গাইডলাইন থাকতে হবে (সেগুলি সূচনা করে আমি যা করতে চাইছিলাম)। উদাহরণস্বরূপ: (আমি সম্ভবত এটি অত্যধিক সরল করছি) বলুন, আমি আমার কোডে StrUtil.equals () ব্যবহার করছি এবং প্রয়োগের ক্ষেত্রে StrUtil.equalsIgnoreCase () এ স্যুইচ করার সিদ্ধান্ত নিই j ), বাস্তবায়ন সঠিক হলেও আমার পরীক্ষাটি ব্যর্থ হতে পারে। এই যাচাইকরণ কল, আইএমও, খারাপ অনুশীলন যদিও এটি লাইব্রেরি / সাব-সিস্টেমের জন্য। অন্যদিকে, ক্লোজডবিঙ্কনে কোনও কল নিশ্চিত করার জন্য যাচাইকরণ ব্যবহার করা কোনও বৈধ ইউজকেস হতে পারে।
রাসেল

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

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

60

ডেভিডের উত্তর অবশ্যই সঠিক তবে আপনি কেন এটি চাইবেন তা পুরোপুরি ব্যাখ্যা করে না।

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

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

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

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


29

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

  • আমার একীকরণে আমার কি মকিতো.ভারিফাই () ব্যবহার করা উচিত (বা অন্য কোনও-ইউনিট-এর তুলনায় আরও বেশি ইউনিট পরীক্ষার) পরীক্ষায় ?
  • আমার ব্ল্যাক-বাক্স ইউনিট-পরীক্ষায় আমি কি মকিতো.ভারিফাই () ব্যবহার করব ?
  • আমার সাদা-বাক্স ইউনিট-পরীক্ষায় আমি কি মকিতো.ভারিফাই () ব্যবহার করব ?

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

এখন, আসুন এই ধাপে ধাপে সমস্ত এর মাধ্যমে।

* - আমার একীকরণে আমার কি মকিতো.ভারিফাই () ব্যবহার করা উচিত? (বা অন্য কোনও-ইউনিট-এর চেয়ে উচ্চতর ইউনিট পরীক্ষার) পরীক্ষায় আমি কি ? * আমি মনে করি উত্তরটি পরিষ্কারভাবে হ'ল না, তদতিরিক্ত আপনি এর জন্য মক ব্যবহার করবেন না। আপনার পরীক্ষা যতটা সম্ভব বাস্তব প্রয়োগের কাছাকাছি হওয়া উচিত। আপনি সম্পূর্ণ ব্যবহারের ক্ষেত্রে পরীক্ষা করছেন, অ্যাপ্লিকেশনটির বিচ্ছিন্ন অংশ নয়।

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

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

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

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


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

আমার কাছে এটি সর্বোত্তম উপলভ্য উত্তর যেহেতু এটি বিভিন্ন পরিস্থিতিতে মকিতো.হেন () ব্যবহার করার সময় উত্তর দেয়। সাবাশ.
মিচিয়েল লিগওয়াটার

8

আমার অবশ্যই বলতে হবে, আপনি একটি শাস্ত্রীয় পদ্ধতির দৃষ্টিকোণ থেকে একেবারে সঠিক:

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

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


0

যেমন কিছু লোক ড

  1. কখনও কখনও আপনার কাছে সরাসরি আউটপুট থাকে না যার উপর আপনি চাপ দিতে পারেন
  2. কখনও কখনও আপনাকে কেবল তা নিশ্চিত করতে হবে যে আপনার পরীক্ষিত পদ্ধতিটি তার সহযোগীদের সঠিক অপ্রত্যক্ষ আউটপুটগুলি প্রেরণ করছে (যা আপনি উপহাস করছেন)।

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


0

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

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

সে কারণে আমি যতটা সম্ভব উপহাস করতে পছন্দ করি: আপনার ডেটা অবজেক্টগুলিকেও বিদ্রূপ করুন। এটি করার সময় আপনি কেবল অন্য শ্রেণীর সঠিক পদ্ধতিগুলি ডাকা হয় কিনা তা যাচাই করতে যাচাইকরণ ব্যবহার করতে পারবেন না, পাশাপাশি পাস করা তথ্যও সেই ডেটা অবজেক্টগুলির সঠিক পদ্ধতিগুলির মাধ্যমে সংগ্রহ করা হয়েছিল। এবং এটি সম্পূর্ণরূপে করার জন্য, আপনাকে কলগুলি যে ক্রমে ঘটে তা পরীক্ষা করা উচিত। উদাহরণ: আপনি যদি একটি ডিবি সত্তা অবজেক্টটি সংশোধন করেন এবং তারপরে একটি সংগ্রহস্থল ব্যবহার করে এটি সংরক্ষণ করেন তবে অবজেক্টের সেটারগুলি সঠিক ডেটা সহ ডাকা হয়েছিল এবং সংগ্রহস্থলের সংরক্ষণের পদ্ধতিটি বলা হয় তা যাচাই করা যথেষ্ট নয়। যদি তাদের ভুল ক্রমে ডাকা হয়, আপনার পদ্ধতিটি এখনও এটি করে না যা এটি করা উচিত। সুতরাং, আমি মকিটো.অরফাইটি ব্যবহার করি না তবে আমি সমস্ত উপহাসের সাথে একটি অর্ডার অবজেক্ট তৈরি করি এবং পরিবর্তে inOrder.verify ব্যবহার করি। এবং আপনি যদি এটি সম্পূর্ণ করতে চান তবে আপনার মকিতোকেও কল করা উচিত। শেষে NoMoreInteferences যাচাই করুন এবং এটি সমস্ত মক পাস। অন্যথায় কেউ এটি পরীক্ষা না করেই নতুন কার্যকারিতা / আচরণ যুক্ত করতে পারে যার অর্থ হবে আপনার কভারেজের পরিসংখ্যান 100% হতে পারে এবং তবুও আপনি কোডটি পাইলিং করছেন যা দৃserted় বা যাচাই করা হয়নি।

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