ইউনিট টেস্টগুলি গেটর এবং সেটারগুলির জন্য লেখা উচিত?


141

আমাদের গেটার এবং সেটটারদের জন্য পরীক্ষা লিখার কথা নাকি এটি কি ওভারকিল?


আমি তাই মনে করি না. গেটর / সেটারের জন্য আপনার পরীক্ষার কেসটি লেখা উচিত নয়।
হ্যারি জয়

1
আমি ধরে নিচ্ছি আপনি জাভা মানে? এটি জাভা জন্য বিশেষত তীব্র প্রশ্ন, আরও আধুনিক ভাষার ক্ষেত্রে এত কম।
স্কাফম্যান

@ স্কাফম্যান কি আধুনিক ভাষাগুলির বৈশিষ্ট্য নেই? অবশ্যই, জাভা এর মতো ভাষাগুলির জন্য তাদের সম্পূর্ণ পদ্ধতিযুক্ত দেহ হওয়া প্রয়োজন, তবে এটি সি # বলার চেয়ে যৌক্তিক আলাদা করে না।
ক্লজ জর্জেনসেন

2
@ ক্লাউস: তিনি সম্পত্তি বলেননি, তিনি বলেছিলেন গেটার্স এবং সেটটাররা। জাভাতে আপনি সেগুলি ম্যানুয়ালি লিখেন, অন্য ভাষায় আপনি আরও ভাল সমর্থন পাবেন।
স্কাফম্যান

উত্তর:


180

আমি বলব না।

@ উইল বলেছেন আপনার 100% কোড কভারেজের লক্ষ্য করা উচিত, তবে আমার মতে এটি একটি বিপজ্জনক ব্যাঘাত। আপনি ইউনিট পরীক্ষা লিখতে পারেন যার 100% কভারেজ রয়েছে এবং এখনও পুরোপুরি কিছুই পরীক্ষা করা যায় না।

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

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


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

7
@ ক্লাউস: ইন্টিগ্রেশন টেস্টিংয়ে ফোকাস করা সম্পর্কে কিছুটা বাদে আমি সম্মত। ইউনিট পরীক্ষাগুলি ভাল ডিজাইনের জন্য সমালোচনা এবং ইন্টিগ্রেশন পরীক্ষার পরিপূরক।
স্কাফম্যান

5
আমি মনে করি যে পুরো টেস্ট স্যুটটি চালিত হলে 100% কোড কভারেজ হ'ল ভাল লক্ষ্য। সম্পত্তি গিটারস সেটটার এবং অন্যান্য কোড বৃহত্তর পরীক্ষার অংশ হিসাবে চালিত হয়। Piecesেকে রাখা শেষ টুকরো সম্ভবত ত্রুটি পরিচালনার। এবং যদি ত্রুটিটি পরিচালনা করে ইউনিট পরীক্ষাগুলি দ্বারা আচ্ছাদিত না হয় এটি কখনই আচ্ছাদিত হবে না। আপনি কি এমন কোনও পণ্য প্রেরণ করতে চান যাতে এমন কোড রয়েছে যা কখনও চালিত হয় নি?
অ্যান্ডারস আবেল

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

আপনি অপ্রয়োজনীয় সেটটারগুলি পরীক্ষা করে দেখতে পারেন যা আপনি (বা একটি সরঞ্জাম) স্রেফ একটি 'বৃত্তাকার' পোজো তৈরির জন্য তৈরি করেছেন। আপনি উদাহরণস্বরূপ GOON.fromJson কে "ফুলে" POJOS করতে ব্যবহার করতে পারেন (কোনও সেটারের প্রয়োজন নেই)। এই ক্ষেত্রে আমার পছন্দ অব্যবহৃত সেটারগুলি মুছে ফেলা।
আলবার্তো গাওনা

36

রায় ওশেরোভ তাঁর বিখ্যাত বই 'আর্ট অফ ইউনিট টেস্টিং'-এ বলেছেন:

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


1
সেগুলি পরীক্ষা করার জন্য কতটা কম সময় এবং আচরণের সম্ভাবনা যুক্ত হওয়ার বিষয়টি বিবেচনা করে কেন আমি তা দেখতে পাচ্ছি না। আমার সন্দেহ হয় যদি চাপ দেওয়া হয় তবে তিনি হয়ত "ভাল, আমি মনে করি না কেন" জবাব দেয়।
টানা স্লেজগাড়ির

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

35

টিডিডি সহ একটি দুর্দান্ত গী


দ্রষ্টব্য : এই উত্তরটি সম্ভাব্য খারাপ পরামর্শ সত্ত্বেও উত্সাহ পেতে থাকে। কেন তা বুঝতে, নীচে তার ছোট বোনটির দিকে একবার নজর দিন ।


বিতর্কিত ঠিক আছে, তবে আমি যুক্তি দিয়ে বলছি যে যে কেউ এই প্রশ্নের 'না' উত্তর দেয় সে টিডিডির একটি মৌলিক ধারণা অনুপস্থিত।

আমার জন্য, আপনি টিডিডিটি অনুসরণ করলে উত্তরটি হ'ল হ্যাঁ । আপনি যদি না হন তবে কোনও উত্তর দেওয়ার মতো উত্তর নেই।

টিডিডিতে ডিডিডি

টিডিডি প্রায়শই আপনাকে প্রধান বেনিফিট বলে উল্লেখ করা হয়।

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

বাস্তবায়ন থেকে দায়িত্ব পৃথক করুন

প্রোগ্রামার হিসাবে, এটি বৈশিষ্ট্যগুলি তাত্পর্যপূর্ণ এবং গেটার্স এবং সেটারকে কোনও ধরণের ওভারহেড হিসাবে কিছু হিসাবে বিবেচনা করতে ভীষণ লোভনীয়।

তবে বৈশিষ্ট্যগুলি একটি বাস্তবায়নের বিশদ, যখন সেটটার এবং গেটারগুলি চুক্তিভিত্তিক ইন্টারফেস যা প্রকৃতপক্ষে প্রোগ্রামগুলিকে কাজ করে।

কোনও বানানের উচিত এমন বানানটি আরও বেশি গুরুত্বপূর্ণ:

এর ক্লায়েন্টদের এর অবস্থা পরিবর্তন করার অনুমতি দিন

এবং

এর ক্লায়েন্টদের তার অবস্থা জিজ্ঞাসা করার অনুমতি দিন

তাহলে এই রাষ্ট্রটি কীভাবে আসলে সংরক্ষণ করা হয় (যার জন্য কোনও বৈশিষ্ট্য সর্বাধিক সাধারণ, তবে একমাত্র উপায় নয়)।

যেমন একটি পরীক্ষা

(The Painter class) should store the provided colour

টিডিডির ডকুমেন্টেশন অংশের জন্য গুরুত্বপূর্ণ ।

চূড়ান্ত বাস্তবায়ন তুচ্ছ (বৈশিষ্ট্য) এবং কোনও প্রতিরক্ষা সুবিধা বহন করে না এমন বিষয়টি যখন আপনি পরীক্ষাটি লেখেন তখন আপনার অজানা হওয়া উচিত।

রাউন্ড ট্রিপ ইঞ্জিনিয়ারিংয়ের অভাব ...

সিস্টেম ডেভলপমেন্ট ওয়ার্ল্ডের অন্যতম প্রধান সমস্যা হ'ল রাউন্ড-ট্রিপ ইঞ্জিনিয়ারিং 1 এর অভাব - একটি সিস্টেমের বিকাশ প্রক্রিয়াটি বিচ্ছিন্ন উপ-প্রক্রিয়াগুলিতে বিভক্ত হয়ে যায় যাগুলির নিদর্শনগুলি (ডকুমেন্টেশন, কোড) প্রায়শই বেমানান হয়।

1 ব্রোডি, মাইকেল এল। "জন মেলোপল্লো: ধারণামূলক মডেলিংয়ের বীজ সেলাই করছেন।" ধারণামূলক মডেলিং: ভিত্তি এবং অ্যাপ্লিকেশন। স্প্রিঞ্জার বার্লিন হাইডেলবার্গ, ২০০৯. ১-৯।

... এবং টিডিডি কীভাবে এটি সমাধান করে

এটি টিডিডির ডকুমেন্টেশন অংশ যা এটি নিশ্চিত করে যে সিস্টেমের কোড এবং এর কোডটি সর্বদা সামঞ্জস্যপূর্ণ।

প্রথমে ডিজাইন করুন, পরে বাস্তবায়ন করুন

টিডিডির মধ্যে আমরা প্রথমে ব্যর্থতা গ্রহণযোগ্যতা পরীক্ষা লিখি, কেবলমাত্র তখনই কোডটি লিখি যা তাদের পাস হতে দেয়।

উচ্চ-স্তরের বিডিডি-র মধ্যে আমরা প্রথমে পরিস্থিতি লিখি, তারপরে সেগুলি পাস করি।

কেন আপনার সেটার এবং গেটর বাদ দেওয়া উচিত?

তত্ত্বগতভাবে, কোনও ব্যক্তির পক্ষে পরীক্ষা লেখার পক্ষে টিডিডি-র মধ্যে একেবারে সম্ভব, এবং অন্যটি কোডটি পাস করে এমনটি প্রয়োগ করে।

তাই নিজেকে জিজ্ঞাসা করুন:

কোনও শ্রেণীর জন্য পরীক্ষা লেখার ব্যক্তিটি গেটার এবং সেটারের উল্লেখ করে।

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

স্পষ্টতই, আপনি যদি কোডটি প্রথমে লিখেন তবে উত্তরটি এতটা ক্লিয়ারকুট নাও হতে পারে।


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

@ জর্জিই ওলেইনিকভ নীচে আমার অন্য উত্তরগুলি পড়েছেন? এটি আপনার দৃষ্টিভঙ্গির সাথে সামঞ্জস্যপূর্ণ।
ইজাকি

21

tl; dr: হ্যাঁ আপনার উচিত , এবং ওপেনপোজোর সাথে এটি তুচ্ছ।

  1. আপনার গেটার এবং সেটারগুলিতে আপনার কিছু বৈধতা থাকা উচিত যাতে আপনার এটি পরীক্ষা করা উচিত। উদাহরণস্বরূপ, setMom(Person p)কাউকে নিজের চেয়ে কম বয়সী হিসাবে তাদের মা হিসাবে স্থাপনের অনুমতি দেওয়া উচিত নয়।

  2. এমনকি যদি আপনি এখন এটির কিছু নাও করেন তবে ভবিষ্যতে আপনার পক্ষে প্রতিকূলতা রয়েছে তবে তা রিগ্রেশন বিশ্লেষণের পক্ষে ভাল। আপনি যদি মায়েদের সেট করার অনুমতি দিতে চান তবে তার পরিবর্তে যদি nullকেউ পরিবর্তিত হয় তবে এটি আপনার অনুমানকে আরও জোরদার করবে।

  3. একটি সাধারণ বাগ void setFoo( Object foo ){ foo = foo; }যেখানে এটি হওয়া উচিত void setFoo( Object foo ){ this.foo = foo; }। (প্রথম যদি fooযে লেখা হচ্ছে প্যারামিটার নাfoo উপর ক্ষেত্র বস্তুর )।

  4. আপনি যদি কোনও অ্যারে বা সংগ্রহ ফিরিয়ে দিচ্ছেন তবে আপনার পরীক্ষা করা উচিত যে গেটার পারফর্ম করছে কিনা যে গেটার ফিরে আসার আগে সেটারে দেওয়া ডেটার ডিফেন্সিভ অনুলিপিগুলি

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

তাদের উদাহরণ থেকে :

final PojoValidator pojoValidator = new PojoValidator();

//create rules
pojoValidator.addRule( new NoPublicFieldsRule  () );
pojoValidator.addRule( new NoPrimitivesRule    () );
pojoValidator.addRule( new GetterMustExistRule () );
pojoValidator.addRule( new SetterMustExistRule () );

//create testers
pojoValidator.addTester( new DefaultValuesNullTester () );
pojoValidator.addTester( new SetterTester            () );
pojoValidator.addTester( new GetterTester            () );

//test all the classes
for(  PojoClass  pojoClass :  PojoClassFactory.getPojoClasses( "net.initech.app", new FilterPackageInfo() )  )
    pojoValidator.runValidation( pojoClass );

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

14
হ্যাঁ, আপনার ইনপুটগুলি সর্বদা যাচাই করা উচিত। আপনি যদি না হন তবে কেন কেবল সর্বজনীন পরিবর্তনশীল ব্যবহার করবেন না? এটি একই জিনিস হয়ে যায়। সেটার বনাম ভেরিয়েবল ব্যবহারের পুরো সুবিধাটি হ'ল এটি আপনাকে নিশ্চিত করতে দেয় যে আপনার অবজেক্টটি কখনই অবৈধ নয়, যেমন বয়স নেতিবাচক সংখ্যা being আপনি যদি অবজেক্টে এটি না করেন আপনি এটি অন্য কোথাও করবেন ("পরিষেবা" গড অবজেক্টের মতো ) এবং এটি সেই মুহূর্তে ওওপি নয়।
টানা স্লেজগাড়ির

1
ঠিক আছে, এটি সম্ভবত আমার সপ্তাহের হাইলাইট। ধন্যবাদ.
টানা স্লেজগাড়ির

19

হ্যাঁ, তবে সর্বদা বিচ্ছিন্ন নয়

আমাকে বিশদভাবে অনুমতি দিন:

ইউনিট পরীক্ষা কি?

উত্তরাধিকার কোড 1 সহ কার্যকরভাবে কাজ করা থেকে :

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

নোট করুন যে ওওপি সহ, যেখানে আপনি গেটার এবং সেটটারগুলি খুঁজে পান, ইউনিটটি শ্রেণি হয় , অগত্যা পৃথক পদ্ধতি নয়

একটি ভাল পরীক্ষা কি?

সমস্ত প্রয়োজনীয়তা এবং পরীক্ষাগুলি হোয়ের যুক্তির ফর্ম অনুসরণ করে :

{পি} সি {কিউ}

কোথায়:

  • {P}পূর্বশর্ত ( প্রদত্ত) )
  • Cট্রিগার শর্ত ( কখন )
  • {Q} পোস্টকন্ডিশন ( তখন )

তারপরে সর্বাধিক:

পরীক্ষার আচরণ, বাস্তবায়ন নয়

এর অর্থ হ'ল Cপোস্ট-কন্ডিশনটি কীভাবে অর্জন করা যায় তা পরীক্ষা করা উচিত নয় , আপনার এটি পরীক্ষা করা উচিত{Q} ofC

এটি যখন ওওপি-তে আসে, C একটি শ্রেণি। সুতরাং আপনার অভ্যন্তরীণ প্রভাবগুলি পরীক্ষা করা উচিত নয়, কেবলমাত্র বাহ্যিক প্রভাব।

কেন বিচি মধ্যে শিম getters এবং সেটটার পরীক্ষা না

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

সুতরাং আপনার বিম গেটার এবং সেটটারকে বিচ্ছিন্নভাবে পরীক্ষা করা উচিত নয়। এইটা খারাপ:

Describe 'LineItem class'

    Describe 'setVAT()'

        it 'should store the VAT rate'

            lineItem = new LineItem()
            lineItem.setVAT( 0.5 )
            expect( lineItem.vat ).toBe( 0.5 )

যদিও এটি setVATব্যতিক্রম ছুঁড়ে মারবে, তবে এখনই বাহ্যিক প্রভাব রয়েছে বলে একটি উপযুক্ত পরীক্ষা উপযুক্ত হবে ।

আপনার কীভাবে গেটার এবং সেটটার পরীক্ষা করা উচিত?

কার্যত কোনও প্রভাব নেই যদি কোনও বস্তুর অভ্যন্তরীণ অবস্থার পরিবর্তন হয় তবে যদি এই ধরনের প্রভাব পরবর্তী সময়ে আসে তবে তার বাইরের উপর যদি এমন পরিবর্তনটির কোনও প্রভাব না থাকে।

সুতরাং সেটার এবং গেটারদের জন্য একটি পরীক্ষা অভ্যন্তরীণ নয়, এই পদ্ধতির বাহ্যিক প্রভাবের সাথে সম্পর্কিত হওয়া উচিত।

উদাহরণ স্বরূপ:

Describe 'LineItem class'

    Describe 'getGross()'

        it 'should return the net time the VAT'

            lineItem = new LineItem()
            lineItem.setNet( 100 )
            lineItem.setVAT( 0.5 )
            expect( lineItem.getGross() ).toBe( 150 )

আপনি নিজেকে মনে করতে পারেন:

এক সেকেন্ড অপেক্ষা করুন, আমরা এখানে পরীক্ষা getGross()করছি না setVAT()

তবে setVAT()ত্রুটি থাকলে সেই পরীক্ষায় সমস্ত ব্যর্থ হওয়া উচিত।

1 পালক, এম।, 2004. উত্তরাধিকার কোড সহ কার্যকরভাবে কাজ করছে। প্রেন্টিস হল পেশাদার।

মার্টিন, আরসি, ২০০৯. ক্লিন কোড: চতুর সফ্টওয়্যার কারুকাজের একটি পুস্তিকা পিয়ারসন শিক্ষা.


13

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

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

স্পষ্ট কারণ রয়েছে যেখানে পড়া / লেখার বৈশিষ্ট্যগুলি ব্যবহার করা উচিত, যেমন ভিউমোডেল বৈশিষ্ট্য যা ইনপুট ক্ষেত্রে আবদ্ধ থাকে ইত্যাদি etc.

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

  1. আপনি পরীক্ষাগুলি অনুপস্থিত যা পরোক্ষভাবে বৈশিষ্ট্যগুলি ব্যবহার করে
  2. বৈশিষ্ট্যগুলি অব্যবহৃত

যদি আপনি গেটার এবং সেটটারদের জন্য পরীক্ষা লিখেন, আপনি কভারেজের একটি ভুল ধারণা পেয়ে থাকেন এবং সম্পত্তিগুলি কার্যকরী আচরণের দ্বারা বাস্তবে ব্যবহৃত হয় কিনা তা নির্ধারণ করতে সক্ষম হবেন না।


12

যদি সাইক্লোমেটিক জটিলতা থাকে এবং / বা সেটারের 1 হয় (যা তারা সাধারণত হয়) তবে উত্তরটি হ'ল না, আপনার উচিত নয়।

সুতরাং আপনার যদি এমন কোনও এসএলএ না থাকে যার জন্য 100% কোড-কভারেজ দরকার হয়, বিরক্ত করবেন না এবং আপনার সফ্টওয়্যারটির গুরুত্বপূর্ণ দিকটি পরীক্ষায় মনোনিবেশ করবেন না।

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


4
যদিও একজনকে গেটসগুলিতে প্রতিরক্ষামূলক অনুলিপি করার জন্য পরীক্ষা করা উচিত
স্লেড করা হয়েছে

8

একটি হাস্যকর, তবুও বুদ্ধিমান গ্রহণ: টেস্টিওসের পথ

"আপনি আজ পরীক্ষা করতে পারেন লিখুন"

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


1
আপনার লিঙ্কটি আসলে নির্দেশ করবে: টেস্টিয়াসের উপায়
জেজেএস

2

এটি আসলে আমার দল এবং I এর মধ্যে একটি সাম্প্রতিক বিষয় হয়ে দাঁড়িয়েছে 80 আমরা 80% কোড কভারেজের জন্য শ্যুট করি। আমার দলটি যুক্তি দেয় যে গেটার্স এবং সেটটারগুলি স্বয়ংক্রিয়ভাবে প্রয়োগ হয় এবং সংকলক পর্দার পিছনে কিছু বেসিক কোড তৈরি করছে। এই ক্ষেত্রে, উত্পন্ন কোডটি দেওয়া হ'ল অ-অনুপ্রবেশমূলক, এটি কম্পাইলারটি আপনার জন্য তৈরি কোডটি পরীক্ষা করে বোঝা যায় না। অ্যাসিঙ্ক পদ্ধতি সম্পর্কে আমাদেরও এই আলোচনা ছিল এবং সেক্ষেত্রে সংকলক পর্দার আড়ালে পুরো গোছা কোড তৈরি করে। এটি একটি পৃথক কেস এবং আমরা পরীক্ষা করি এমন কিছু। দীর্ঘ উত্তর সংক্ষিপ্ত করুন, এটি আপনার দলের সাথে নিয়ে আসুন এবং এটির জন্য পরীক্ষা করার উপযুক্ত কিনা তা নিজেরাই স্থির করুন।

এছাড়াও, আপনি যদি আমাদের মতো কোড কভারেজ রিপোর্ট ব্যবহার করে থাকেন তবে একটি কাজ আপনি করতে পারেন তা হল [এক্সক্লুডফ্রোমকোডকভারেজ] বৈশিষ্ট্য যুক্ত করুন। আমাদের সমাধানটি এমন মডেলগুলির জন্য ব্যবহার করা হয়েছে যা কেবলমাত্র গেটর এবং সেটটার ব্যবহার করে বা সম্পত্তিতে সম্পত্তি ব্যবহার করে। কোড কভারেজ প্রতিবেদনটি চালিত হওয়ার পরে আপনি যদি আপনার কোড কভারেজ শতাংশের হিসাব করতে যা ব্যবহার করছেন এটি ধরে নিলে এটি মোট কোড কভারেজ% কে প্রভাব ফেলবে না। শুভ পরীক্ষা!


2

আমার মতে কোড কভারেজ হ'ল এটি ভাল উপায় যা আপনি কোনও ক্রিয়াকলাপটি missedেকে রাখতে পারেন তা মিস করেছেন কিনা।

যখন আপনি কভারেজটি রঙিন রঙের দ্বারা ম্যানুয়ালি পরীক্ষা করেন তখন এটি যুক্তিযুক্ত হতে পারে যে প্লেইন গেটার্স এবং সিটারগুলি পরীক্ষা করার দরকার নেই (যদিও আমি সবসময়ই করি)।

আপনি যখন কেবল আপনার প্রকল্পের কোড কভারেজ শতাংশ পরীক্ষা করেন, তারপরে ৮০% এর মতো পরীক্ষার কভারেজ শতাংশ অর্থহীন। আপনি কোনওটিই যৌক্তিক অংশের পরীক্ষা করতে পারবেন না এবং কিছু গুরুত্বপূর্ণ অংশ ভুলে যেতে পারবেন। এই ক্ষেত্রে কেবল 100% এর অর্থ হল যে আপনি আপনার সমস্ত অত্যাবশ্যক কোড পরীক্ষা করেছেন (এবং পাশাপাশি সমস্ত অ-লজিকাল কোড)। এটি 99.9% হওয়ার সাথে সাথে আপনি জানেন যে কিছু ভুলে গেছে।

যাইহোক: কোড কভারেজ হ'ল এটি চূড়ান্ত যাচাই করে দেখুন যে আপনি কোনও ক্লাস পুরোপুরি (ইউনিট) পরীক্ষা করেছেন কিনা। তবে ১০০% কোড কভারেজের অর্থ এই নয় যে আপনি প্রকৃতপক্ষে শ্রেণীর সমস্ত কার্যকারিতা পরীক্ষা করেছেন। সুতরাং ইউনিট পরীক্ষা সর্বদা ক্লাসের যুক্তি অনুসরণ করে প্রয়োগ করা উচিত। আপনি কিছু ভুলে গেছেন কিনা তা শেষ পর্যন্ত আপনি কভারেজ চালান। আপনি যখন এটি সঠিকভাবে করেছেন, আপনি প্রথমবার 100% মারলেন।

আরও একটি জিনিস: সম্প্রতি নেদারল্যান্ডসের একটি বড় ব্যাংকে কাজ করার সময় আমি লক্ষ্য করেছি যে সোনার 100% কোডের কভারেজ নির্দেশ করেছেন। তবে, আমি জানতাম কিছু অনুপস্থিত ছিল। প্রতি ফাইল কোড কভারেজ শতাংশ পরিদর্শন করে এটি একটি ফাইলকে কম শতাংশে নির্দেশ করে indicated পুরো কোড বেস শতাংশটি এত বড় যে এক ফাইল শতাংশকে 99.9% হিসাবে প্রদর্শিত হতে পারে নি। সুতরাং আপনি এটি সন্ধান করতে চাইতে পারেন ...


1

আমি নিজেই JUnit কোডে প্রাপ্ত কভারেজটির একটু বিশ্লেষণ করেছি

অনাবৃত কোডের একটি বিভাগ "পরীক্ষা করা খুব সহজ" । এটিতে সহজ সরকারী এবং সেটটার অন্তর্ভুক্ত রয়েছে, যা ইউনাইটের বিকাশকারীরা পরীক্ষা করে না

অন্যদিকে, JUnit 3 টি লাইনের চেয়ে বেশি কোনও (অ-অবচয়) পদ্ধতি নেই যা কোনও পরীক্ষার আওতায় নেই।


1

আমি বলব: ইয়েস গেটর / সেটার পদ্ধতিতে ত্রুটিগুলি নিঃশব্দে লুকিয়ে থাকতে পারে এবং কিছু কুৎসিত বাগ তৈরি করতে পারে।

এটি এবং আরও কিছু পরীক্ষা সহজ করার জন্য আমি একটি lib লিখেছি। আপনার JUnit পরীক্ষাগুলিতে আপনাকে কেবল লিখতে হবে এটি হ'ল:

        assertTrue(executor.execute(Example.class, Arrays.asList( new DefensiveCopyingCheck(),
            new EmptyCollectionCheck(), new GetterIsSetterCheck(),
            new HashcodeAndEqualsCheck(), new PublicVariableCheck())));

-> https://github.com/Mixermachine/base-test


0

হ্যাঁ, বিশেষত যদি আইটেমটি পেতে হয় তবে কোনও বিমূর্ত শ্রেণি থেকে বিভাজিত শ্রেণীর একটি বস্তু। আপনার আইডিই বা আপনাকে সতর্ক করতে পারে যে একটি নির্দিষ্ট সম্পত্তি আরম্ভ করা হয়নি।

এবং তারপরে কিছু আপাতদৃষ্টিতে সম্পর্কিত নয় এমন পরীক্ষার সাথে ক্র্যাশ হয় NullPointerException এবং একটি গেটেবল সম্পত্তি আসলে প্রথম স্থানে পৌঁছানোর জন্য এটি খুঁজে পেতে আপনার কিছুটা সময় লাগে।

যদিও এটি এখনও উত্পাদনের সমস্যাটি আবিষ্কার করার মতো খারাপ হবে না।

আপনার সমস্ত বিমূর্ত ক্লাসের কনস্ট্রাক্টর রয়েছে তা নিশ্চিত করে নেওয়া ভাল ধারণা হতে পারে। যদি তা না হয় তবে প্রাপ্তির পরীক্ষা আপনাকে সেখানে কোনও সমস্যার বিষয়ে সতর্ক করতে পারে।

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

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