unit testing - নতুন ইউনিট টেস্টিং, কিভাবে মহান পরীক্ষা লিখতে?




unit-testing (5)

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

এটি একটি বিশাল কাজ, বেশিরভাগই পরীক্ষার জন্য ক্লাসের সংখ্যা, কারণ লেখার পরীক্ষাগুলি আমার কাছে নতুন।

আমি ইতিমধ্যে ক্লাসের গুচ্ছ জন্য পরীক্ষা লিখেছি, কিন্তু এখন আমি এটা ঠিক করছি যদি আমি ভাবছি।

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

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

সম্পাদনা: আমি স্ট্যাক ওভারফ্লোকে ধন্যবাদ জানাতে চাই, আমার খুব কম ইনপুট ছিল যে 15 মিনিট যা আমি অনলাইনে পড়ার ঘন্টার বেশি উত্তর দিয়েছি।


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

আমি আপনি ভুল করছেন মনে হয়।

একটি ইউনিট পরীক্ষা করা উচিত:

  • এক পদ্ধতি পরীক্ষা করুন
  • যে পদ্ধতিতে কিছু নির্দিষ্ট আর্গুমেন্ট প্রদান
  • পরীক্ষার প্রত্যাশিত হিসাবে পরীক্ষা

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

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

আপনি গতিশীলভাবে প্রত্যাশিত ফলাফল জেনারেট করার জন্য পদ্ধতিটিকে নিজের (অথবা এটি ব্যবহার করা যেকোনো অভ্যন্তরীণ কোড) ব্যবহার করা উচিত নয়। প্রত্যাশিত ফলাফলটি আপনার পরীক্ষার ক্ষেত্রে কঠোর-কোডেড হওয়া উচিত যাতে এটি বাস্তবায়িত হলে পরিবর্তন না হয়। এখানে একটি ইউনিট পরীক্ষা করা উচিত কি একটি সরলীকৃত উদাহরণ:

testAdd()
{
    int x = 5;
    int y = -2;
    int expectedResult = 3;

    Calculator calculator = new Calculator();
    int actualResult = calculator.Add(x, y);
    Assert.AreEqual(expectedResult, actualResult);
}

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


আপনার কোড পূর্ণ কভারেজ পেতে পরীক্ষা লিখুন না। আপনার প্রয়োজনীয়তা গ্যারান্টি যে পরীক্ষা লিখুন। আপনি অপ্রয়োজনীয় কোডপথগুলি আবিষ্কার করতে পারেন। বিপরীতভাবে, যদি তারা প্রয়োজন হয়, তারা কোন ধরনের প্রয়োজন পূরণ করতে হয়; এটা কি এটি খুঁজে এবং প্রয়োজন পরীক্ষা (পথ না)।

আপনার পরীক্ষা ছোট রাখুন: প্রয়োজন প্রতি এক পরীক্ষা।

পরে, যখন আপনাকে একটি পরিবর্তন করতে হবে (বা নতুন কোড লিখতে হবে), প্রথমে একটি পরীক্ষা লিখতে চেষ্টা করুন। শুধু একটি. তারপর আপনি পরীক্ষা চালিত উন্নয়নের প্রথম পদক্ষেপ নিতে হবে।


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


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

বিদ্যমান চালানো টেস্ট উন্নয়নের জন্য বিদ্যমান কোড

আমি গ্রহণযোগ্য উত্তর বইয়ের সুপারিশ দ্বিতীয়, কিন্তু তারপরে সেখানে উত্তরের আরও লিঙ্ক সম্পর্কিত তথ্য রয়েছে।


পরীক্ষা করার পদ্ধতিটি লেখার আগে ইউনিট টেস্ট লেখার চেষ্টা করুন।

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

আপনি পদ্ধতিটির ফলাফলগুলি সবসময় পরীক্ষা করে দেখবেন, পদ্ধতিটি সেই ফলাফলগুলি কীভাবে পায় না।







testing