আমার কাছে মূল পার্থক্যটি হ'ল ইন্টিগ্রেশন টেস্টগুলি যদি কোনও বৈশিষ্ট্যটি কাজ করছে বা ভাঙা হয় তবে তা প্রকাশ করে, যেহেতু তারা বাস্তবের কাছাকাছি একটি দৃশ্যে কোডকে জোর দেয়। তারা এক বা একাধিক সফ্টওয়্যার পদ্ধতি বা বৈশিষ্ট্য এবং পরীক্ষা প্রত্যাশা করে যদি তারা প্রত্যাশা অনুযায়ী কাজ করে।
বিপরীতে, একটি একক পরীক্ষার একটি ইউনিট পরীক্ষাটি (প্রায়শই ভুল) এই ধারণার উপর নির্ভর করে যে বাকি সফ্টওয়্যারটি সঠিকভাবে কাজ করছে, কারণ এটি স্পষ্টভাবে প্রতিটি নির্ভরতাটিকে ঠাট্টা করে।
অতএব, যখন কোনও বৈশিষ্ট্য প্রয়োগকারী কোনও পদ্ধতির ইউনিট পরীক্ষা সবুজ হয়, তার অর্থ এই নয় যে বৈশিষ্ট্যটি কাজ করছে।
বলুন আপনার কোথাও এর মতো একটি পদ্ধতি রয়েছে:
public SomeResults DoSomething(someInput) {
var someResult = [Do your job with someInput];
Log.TrackTheFactYouDidYourJob();
return someResults;
}
DoSomething
আপনার গ্রাহকের কাছে এটি অত্যন্ত গুরুত্বপূর্ণ: এটি একটি বৈশিষ্ট্য, একমাত্র বিষয় যা গুরুত্বপূর্ণ। এ কারণেই আপনি সাধারণত একটি শসার স্পেসিফিকেশন লিখুন এটি দৃser় করে: আপনি যাচাই করতে এবং যোগাযোগ করতে চান বৈশিষ্ট্যটি কাজ করছে কি না or
Feature: To be able to do something
In order to do something
As someone
I want the system to do this thing
Scenario: A sample one
Given this situation
When I do something
Then what I get is what I was expecting for
সন্দেহ নেই: যদি পরীক্ষাটি পাস হয় তবে আপনি দৃ as়ভাবে বলতে পারেন যে আপনি একটি কাজের বৈশিষ্ট্য সরবরাহ করছেন। এটিই আপনি ব্যবসায়িক মান বলতে পারেন ।
আপনি যদি ইউনিট পরীক্ষা লিখতে চান তবে আপনার DoSomething
ভান করা উচিত (কিছু উপদ্রব ব্যবহার করে) যে বাকী ক্লাস এবং পদ্ধতিগুলি কাজ করছে (এটি: এটি, পদ্ধতিটি যে সমস্ত নির্ভরতা ব্যবহার করছে তা সঠিকভাবে কাজ করছে) এবং আপনার পদ্ধতিটি কাজ করছে তা জোর দিয়ে দিন।
অনুশীলনে, আপনি যেমন কিছু করেন:
public SomeResults DoSomething(someInput) {
var someResult = [Do your job with someInput];
FakeAlwaysWorkingLog.TrackTheFactYouDidYourJob(); // Using a mock Log
return someResults;
}
আপনি নির্ভরতা ইনজেকশন, বা কোনও কারখানার পদ্ধতি বা কোনও মক ফ্রেমওয়ার্কের সাহায্যে এটি করতে পারেন বা কেবল পরীক্ষার অধীনে শ্রেণি প্রসারিত করতে পারেন।
সেখানে একটি বাগ এর ধরুন Log.DoSomething()
। ভাগ্যক্রমে, ঘেরকিন স্পেক এটি আবিষ্কার করবে এবং আপনার শেষ থেকে শেষের পরীক্ষাগুলি ব্যর্থ হবে।
বৈশিষ্ট্যটি কাজ করবে না, কারণ Log
ভাঙা, কারণ [Do your job with someInput]
এটি কাজ করছে না। এবং, [Do your job with someInput]
যাইহোক , সেই পদ্ধতির একমাত্র দায়িত্ব।
এছাড়াও, ধরুন Log
100 অন্যান্য ক্লাসের 100 টি অন্যান্য পদ্ধতিতে 100 টি অন্যান্য বৈশিষ্ট্যগুলিতে ব্যবহৃত হয়।
হ্যাঁ, 100 টি বৈশিষ্ট্য ব্যর্থ হবে। তবে, ভাগ্যক্রমে, 100 টি-টু-এন্ড টেস্টগুলি পাশাপাশি ব্যর্থ হচ্ছে এবং সমস্যাটি প্রকাশ করছে। এবং, হ্যাঁ: তারা সত্য বলছে ।
এটি খুব দরকারী তথ্য: আমি জানি আমার একটি ভাঙা পণ্য রয়েছে। এটি খুব বিভ্রান্তিকর তথ্য: এটি সমস্যাটি কোথায় তা সম্পর্কে আমাকে কিছুই বলেনি। এটি আমার লক্ষণগুলি যোগাযোগ করে, মূল কারণটি নয়।
তবুও, DoSomething
এর ইউনিট পরীক্ষা সবুজ, কারণ এটি একটি নকল ব্যবহার করে Log
, যা কখনও ভেঙে ফেলার জন্য নির্মিত। এবং, হ্যাঁ: এটি স্পষ্টভাবে মিথ্যা বলছে । এটি ভাঙা বৈশিষ্ট্যটি কাজ করছে বলে যোগাযোগ করছে। কিভাবে এটি দরকারী হতে পারে?
(যদি DoSomething()
ইউনিটের পরীক্ষাটি ব্যর্থ হয় তবে নিশ্চিত হন: [Do your job with someInput]
কিছু বাগ রয়েছে))
ধরুন এটি একটি ভাঙ্গা শ্রেণি সহ একটি সিস্টেম:
একটি একক বাগ বেশ কয়েকটি বৈশিষ্ট্য ভঙ্গ করবে এবং কয়েকটি সংহতকরণ পরীক্ষা ব্যর্থ হবে।
অন্যদিকে, একই বাগটি কেবল একটি ইউনিটের পরীক্ষা ভঙ্গ করবে।
এখন, দুটি পরিস্থিতিতে তুলনা করুন।
একই বাগটি কেবলমাত্র একটি ইউনিট পরীক্ষা ভঙ্গ করবে।
- ভাঙা ব্যবহার করে আপনার সমস্ত বৈশিষ্ট্য
Log
লাল
- আপনার সমস্ত ইউনিট পরীক্ষা সবুজ, কেবলমাত্র ইউনিট পরীক্ষা
Log
লাল
আসলে, একটি ভাঙা বৈশিষ্ট্য ব্যবহার করে সমস্ত মডিউলগুলির ইউনিট পরীক্ষাগুলি সবুজ কারণ মক ব্যবহার করে তারা নির্ভরতা সরিয়ে ফেলে। অন্য কথায়, তারা একটি আদর্শ, সম্পূর্ণ কল্পিত বিশ্বে চলে। এবং এটি বাগগুলি আলাদা করতে এবং সেগুলি অনুসন্ধান করার একমাত্র উপায়। ইউনিট টেস্টিং মানে মশকরা। আপনি যদি উপহাস না করেন তবে আপনি ইউনিট পরীক্ষা করছেন না।
পার্থক্য
ইন্টিগ্রেশন টেস্টগুলি কী কাজ করছে না তা জানায় । তবে সমস্যাটি কোথায় হতে পারে তা অনুমান করার ক্ষেত্রে তাদের কোনও লাভ নেই ।
ইউনিট পরীক্ষাগুলি হ'ল একমাত্র পরীক্ষা যা আপনাকে জানায় যে বাগটি ঠিক কোথায় । এই তথ্য আঁকার জন্য, তাদের অবশ্যই বিদ্রূপপূর্ণ পরিবেশে পদ্ধতিটি চালানো উচিত, যেখানে অন্যান্য সমস্ত নির্ভরতা সঠিকভাবে কাজ করার কথা রয়েছে।
সে কারণেই আমি মনে করি যে আপনার বাক্য "বা এটি কি কেবলমাত্র একটি ইউনিট পরীক্ষা যা 2 শ্রেণি বিস্তৃত" কোনওভাবে বাস্তুচ্যুত হয়। একটি ইউনিট পরীক্ষা কখনও 2 ক্লাস স্প্যান করা উচিত।
এই উত্তরটি মূলত আমি এখানে যা লিখেছি তার একটি সংক্ষিপ্তসার: ইউনিট পরীক্ষাগুলি মিথ্যা বলে, এ কারণেই আমি তাদের ভালবাসি ।