আমাদের গেটার এবং সেটটারদের জন্য পরীক্ষা লিখার কথা নাকি এটি কি ওভারকিল?
আমাদের গেটার এবং সেটটারদের জন্য পরীক্ষা লিখার কথা নাকি এটি কি ওভারকিল?
উত্তর:
আমি বলব না।
@ উইল বলেছেন আপনার 100% কোড কভারেজের লক্ষ্য করা উচিত, তবে আমার মতে এটি একটি বিপজ্জনক ব্যাঘাত। আপনি ইউনিট পরীক্ষা লিখতে পারেন যার 100% কভারেজ রয়েছে এবং এখনও পুরোপুরি কিছুই পরীক্ষা করা যায় না।
ইউনিট পরীক্ষাগুলি আপনার কোডটির আচরণগতভাবে, অভিব্যক্তিপূর্ণ এবং অর্থপূর্ণ উপায়ে পরীক্ষা করার জন্য রয়েছে এবং গেটার্স / সেটটারগুলি কেবল শেষ করার উপায়। যদি আপনি পরীক্ষাগুলি "রিয়েল" কার্যকারিতা পরীক্ষা করার লক্ষ্য অর্জনের জন্য গেটার / সেটটারগুলি ব্যবহার করেন, তবে এটি যথেষ্ট ভাল।
অন্যদিকে, যদি আপনার প্রাপ্তি এবং সেটটাররা কেবল পেতে এবং সেট করার চেয়ে আরও বেশি কিছু করে (যেমন তারা সঠিকভাবে জটিল পদ্ধতি) তবে হ্যাঁ, তাদের পরীক্ষা করা উচিত। তবে কেবল কোনও গেটর বা সেটটার পরীক্ষা করার জন্য ইউনিট টেস্ট কেস লিখবেন না , এটি সময় নষ্ট।
রায় ওশেরোভ তাঁর বিখ্যাত বই 'আর্ট অফ ইউনিট টেস্টিং'-এ বলেছেন:
প্রোপার্টি (জাভাতে গেটার / সেটার) কোডের এমন ভাল উদাহরণ যা সাধারণত কোনও যুক্তি ধারণ করে না এবং পরীক্ষার প্রয়োজন হয় না। তবে নজর রাখুন: একবার আপনি সম্পত্তির অভ্যন্তরে কোনও চেক যোগ করলে, আপনি নিশ্চিত করতে চাইবেন যে যুক্তি পরীক্ষা করা হচ্ছে।
দ্রষ্টব্য : এই উত্তরটি সম্ভাব্য খারাপ পরামর্শ সত্ত্বেও উত্সাহ পেতে থাকে। কেন তা বুঝতে, নীচে তার ছোট বোনটির দিকে একবার নজর দিন ।
বিতর্কিত ঠিক আছে, তবে আমি যুক্তি দিয়ে বলছি যে যে কেউ এই প্রশ্নের 'না' উত্তর দেয় সে টিডিডির একটি মৌলিক ধারণা অনুপস্থিত।
আমার জন্য, আপনি টিডিডিটি অনুসরণ করলে উত্তরটি হ'ল হ্যাঁ । আপনি যদি না হন তবে কোনও উত্তর দেওয়ার মতো উত্তর নেই।
টিডিডি প্রায়শই আপনাকে প্রধান বেনিফিট বলে উল্লেখ করা হয়।
প্রোগ্রামার হিসাবে, এটি বৈশিষ্ট্যগুলি তাত্পর্যপূর্ণ এবং গেটার্স এবং সেটারকে কোনও ধরণের ওভারহেড হিসাবে কিছু হিসাবে বিবেচনা করতে ভীষণ লোভনীয়।
তবে বৈশিষ্ট্যগুলি একটি বাস্তবায়নের বিশদ, যখন সেটটার এবং গেটারগুলি চুক্তিভিত্তিক ইন্টারফেস যা প্রকৃতপক্ষে প্রোগ্রামগুলিকে কাজ করে।
কোনও বানানের উচিত এমন বানানটি আরও বেশি গুরুত্বপূর্ণ:
এর ক্লায়েন্টদের এর অবস্থা পরিবর্তন করার অনুমতি দিন
এবং
এর ক্লায়েন্টদের তার অবস্থা জিজ্ঞাসা করার অনুমতি দিন
তাহলে এই রাষ্ট্রটি কীভাবে আসলে সংরক্ষণ করা হয় (যার জন্য কোনও বৈশিষ্ট্য সর্বাধিক সাধারণ, তবে একমাত্র উপায় নয়)।
যেমন একটি পরীক্ষা
(The Painter class) should store the provided colour
টিডিডির ডকুমেন্টেশন অংশের জন্য গুরুত্বপূর্ণ ।
চূড়ান্ত বাস্তবায়ন তুচ্ছ (বৈশিষ্ট্য) এবং কোনও প্রতিরক্ষা সুবিধা বহন করে না এমন বিষয়টি যখন আপনি পরীক্ষাটি লেখেন তখন আপনার অজানা হওয়া উচিত।
সিস্টেম ডেভলপমেন্ট ওয়ার্ল্ডের অন্যতম প্রধান সমস্যা হ'ল রাউন্ড-ট্রিপ ইঞ্জিনিয়ারিং 1 এর অভাব - একটি সিস্টেমের বিকাশ প্রক্রিয়াটি বিচ্ছিন্ন উপ-প্রক্রিয়াগুলিতে বিভক্ত হয়ে যায় যাগুলির নিদর্শনগুলি (ডকুমেন্টেশন, কোড) প্রায়শই বেমানান হয়।
1 ব্রোডি, মাইকেল এল। "জন মেলোপল্লো: ধারণামূলক মডেলিংয়ের বীজ সেলাই করছেন।" ধারণামূলক মডেলিং: ভিত্তি এবং অ্যাপ্লিকেশন। স্প্রিঞ্জার বার্লিন হাইডেলবার্গ, ২০০৯. ১-৯।
এটি টিডিডির ডকুমেন্টেশন অংশ যা এটি নিশ্চিত করে যে সিস্টেমের কোড এবং এর কোডটি সর্বদা সামঞ্জস্যপূর্ণ।
টিডিডির মধ্যে আমরা প্রথমে ব্যর্থতা গ্রহণযোগ্যতা পরীক্ষা লিখি, কেবলমাত্র তখনই কোডটি লিখি যা তাদের পাস হতে দেয়।
উচ্চ-স্তরের বিডিডি-র মধ্যে আমরা প্রথমে পরিস্থিতি লিখি, তারপরে সেগুলি পাস করি।
কেন আপনার সেটার এবং গেটর বাদ দেওয়া উচিত?
তত্ত্বগতভাবে, কোনও ব্যক্তির পক্ষে পরীক্ষা লেখার পক্ষে টিডিডি-র মধ্যে একেবারে সম্ভব, এবং অন্যটি কোডটি পাস করে এমনটি প্রয়োগ করে।
তাই নিজেকে জিজ্ঞাসা করুন:
কোনও শ্রেণীর জন্য পরীক্ষা লেখার ব্যক্তিটি গেটার এবং সেটারের উল্লেখ করে।
যেহেতু গেটার্স এবং সেটটারগুলি একটি শ্রেণীর কাছে সর্বজনীন ইন্টারফেস, তাই উত্তরটি অবশ্যই হ্যাঁ , বা কোনও অবজেক্টের স্থিতি স্থাপন বা অনুসন্ধানের কোনও উপায় থাকবে না। তবে এটি করার উপায়টি অগত্যা প্রতিটি পদ্ধতিকে বিচ্ছিন্নভাবে পরীক্ষা করার মাধ্যমে নয়, আরও জন্য আমার অন্য উত্তরটি দেখুন।
স্পষ্টতই, আপনি যদি কোডটি প্রথমে লিখেন তবে উত্তরটি এতটা ক্লিয়ারকুট নাও হতে পারে।
tl; dr: হ্যাঁ আপনার উচিত , এবং ওপেনপোজোর সাথে এটি তুচ্ছ।
আপনার গেটার এবং সেটারগুলিতে আপনার কিছু বৈধতা থাকা উচিত যাতে আপনার এটি পরীক্ষা করা উচিত। উদাহরণস্বরূপ, setMom(Person p)
কাউকে নিজের চেয়ে কম বয়সী হিসাবে তাদের মা হিসাবে স্থাপনের অনুমতি দেওয়া উচিত নয়।
এমনকি যদি আপনি এখন এটির কিছু নাও করেন তবে ভবিষ্যতে আপনার পক্ষে প্রতিকূলতা রয়েছে তবে তা রিগ্রেশন বিশ্লেষণের পক্ষে ভাল। আপনি যদি মায়েদের সেট করার অনুমতি দিতে চান তবে তার পরিবর্তে যদি null
কেউ পরিবর্তিত হয় তবে এটি আপনার অনুমানকে আরও জোরদার করবে।
একটি সাধারণ বাগ void setFoo( Object foo ){ foo = foo; }
যেখানে এটি হওয়া উচিত void setFoo( Object foo ){ this.foo = foo; }
। (প্রথম যদি foo
যে লেখা হচ্ছে প্যারামিটার নাfoo
উপর ক্ষেত্র বস্তুর )।
আপনি যদি কোনও অ্যারে বা সংগ্রহ ফিরিয়ে দিচ্ছেন তবে আপনার পরীক্ষা করা উচিত যে গেটার পারফর্ম করছে কিনা যে গেটার ফিরে আসার আগে সেটারে দেওয়া ডেটার ডিফেন্সিভ অনুলিপিগুলি ।
অন্যথায়, আপনার যদি সর্বাধিক বেসিক সেটার / গেটার থাকে তবে ইউনিট-টেস্টিংগুলি প্রতি-বস্তুতে প্রায় 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 );
আমাকে বিশদভাবে অনুমতি দিন:
উত্তরাধিকার কোড 1 সহ কার্যকরভাবে কাজ করা থেকে :
শব্দ ইউনিট পরীক্ষা সফ্টওয়্যার বিকাশে একটি দীর্ঘ ইতিহাস আছে। ইউনিট পরীক্ষার বেশিরভাগ ধারণার মধ্যে সাধারণ ধারণাটি হ'ল তারা সফ্টওয়্যারটির পৃথক উপাদানগুলির বিচ্ছিন্নতার জন্য পরীক্ষা করে। উপাদানগুলি কি? সংজ্ঞাটি পরিবর্তিত হয়, তবে ইউনিট পরীক্ষায় আমরা সাধারণত কোনও সিস্টেমের সবচেয়ে পারমাণবিক আচরণগত ইউনিটগুলির সাথে সম্পর্কিত concerned পদ্ধতিগত কোডে, ইউনিটগুলি প্রায়শই ফাংশন হয়। অবজেক্ট ওরিয়েন্টেড কোডে ইউনিটগুলি ক্লাস।
নোট করুন যে ওওপি সহ, যেখানে আপনি গেটার এবং সেটটারগুলি খুঁজে পান, ইউনিটটি শ্রেণি হয় , অগত্যা পৃথক পদ্ধতি নয় ।
সমস্ত প্রয়োজনীয়তা এবং পরীক্ষাগুলি হোয়ের যুক্তির ফর্ম অনুসরণ করে :
{পি} সি {কিউ}
কোথায়:
{P}
পূর্বশর্ত ( প্রদত্ত) )C
ট্রিগার শর্ত ( কখন ){Q}
পোস্টকন্ডিশন ( তখন )তারপরে সর্বাধিক:
পরীক্ষার আচরণ, বাস্তবায়ন নয়
এর অর্থ হ'ল C
পোস্ট-কন্ডিশনটি কীভাবে অর্জন করা যায় তা পরীক্ষা করা উচিত নয় , আপনার এটি পরীক্ষা করা উচিত{Q}
ofC
।
এটি যখন ওওপি-তে আসে, C
একটি শ্রেণি। সুতরাং আপনার অভ্যন্তরীণ প্রভাবগুলি পরীক্ষা করা উচিত নয়, কেবলমাত্র বাহ্যিক প্রভাব।
গেটার্স এবং সিটারগুলি কিছু যুক্তি জড়িত থাকতে পারে, তবে এত দিন এই যুক্তিটির বাহ্যিক প্রভাব নেই - তাদের মটরশুটি অ্যাকসেসর করে তোলে 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. উত্তরাধিকার কোড সহ কার্যকরভাবে কাজ করছে। প্রেন্টিস হল পেশাদার।
২ মার্টিন, আরসি, ২০০৯. ক্লিন কোড: চতুর সফ্টওয়্যার কারুকাজের একটি পুস্তিকা পিয়ারসন শিক্ষা.
সম্পত্তিগুলির যথাযথ কারণগুলি থাকা সত্ত্বেও, একটি সাধারণ অবজেক্ট ওরিয়েন্টেড ডিজাইনের বিশ্বাস রয়েছে যে সম্পত্তিগুলির মাধ্যমে সদস্য রাষ্ট্রের প্রকাশ করা খারাপ নকশা। ওপেন ক্লোজড প্রিন্সিপাল নিয়ে রবার্ট মার্টিনের নিবন্ধ এই বলে প্রসারিত করে যে সম্পত্তিগুলি সংযুক্তিকে উত্সাহ দেয় এবং অতএব কোনও শ্রেণি পরিবর্তন থেকে বন্ধ করার ক্ষমতা সীমাবদ্ধ করে - আপনি যদি সম্পত্তিটি পরিবর্তন করেন তবে শ্রেণীর সমস্ত গ্রাহককেও পরিবর্তনের প্রয়োজন হবে। তিনি যোগ্যতা অর্জন করেছেন যে সদস্যের পরিবর্তনশীলগুলি প্রকাশ করা অগত্যা খারাপ ডিজাইন নয়, এটি কেবল খারাপ স্টাইল হতে পারে। তবে, বৈশিষ্ট্যগুলি কেবল পঠনযোগ্য হলে অপব্যবহার এবং পার্শ্ব-প্রতিক্রিয়া হওয়ার সম্ভাবনা কম থাকে।
ইউনিট টেস্টিংয়ের জন্য আমি যে সর্বোত্তম পন্থা সরবরাহ করতে পারি তা হ'ল যথাসম্ভব সুরক্ষিত বা অভ্যন্তরীণ বৈশিষ্ট্য তৈরি করা। গিটারস এবং সেটটারদের বোকা পরীক্ষা লিখতে নিরুৎসাহিত করার সময় এটি মিলন প্রতিরোধ করবে।
স্পষ্ট কারণ রয়েছে যেখানে পড়া / লেখার বৈশিষ্ট্যগুলি ব্যবহার করা উচিত, যেমন ভিউমোডেল বৈশিষ্ট্য যা ইনপুট ক্ষেত্রে আবদ্ধ থাকে ইত্যাদি etc.
আরও ব্যবহারিকভাবে, ইউনিট পরীক্ষাগুলি জনসাধারণের পদ্ধতির মাধ্যমে কার্যকারিতা চালানো উচিত। আপনি যে কোডটি পরীক্ষা করছেন সেটি যদি সেই বৈশিষ্ট্যগুলি ব্যবহার করে তবে আপনি বিনামূল্যে কোড-কভারেজ পাবেন coverage যদি দেখা যায় যে এই বৈশিষ্ট্যগুলি কখনই কোড-কভারেজ দ্বারা হাইলাইট হয় না তবে খুব শক্তিশালী সম্ভাবনা রয়েছে:
যদি আপনি গেটার এবং সেটটারদের জন্য পরীক্ষা লিখেন, আপনি কভারেজের একটি ভুল ধারণা পেয়ে থাকেন এবং সম্পত্তিগুলি কার্যকরী আচরণের দ্বারা বাস্তবে ব্যবহৃত হয় কিনা তা নির্ধারণ করতে সক্ষম হবেন না।
যদি সাইক্লোমেটিক জটিলতা থাকে এবং / বা সেটারের 1 হয় (যা তারা সাধারণত হয়) তবে উত্তরটি হ'ল না, আপনার উচিত নয়।
সুতরাং আপনার যদি এমন কোনও এসএলএ না থাকে যার জন্য 100% কোড-কভারেজ দরকার হয়, বিরক্ত করবেন না এবং আপনার সফ্টওয়্যারটির গুরুত্বপূর্ণ দিকটি পরীক্ষায় মনোনিবেশ করবেন না।
পিএস গেটার এবং সেটারগুলিকে আলাদা করতে মনে রাখবেন, এমনকি সি # এর মতো ভাষায় যেখানে বৈশিষ্ট্যগুলি একই জিনিস বলে মনে হতে পারে। সেটার জটিলতা প্রাপ্তির চেয়ে বেশি হতে পারে এবং এইভাবে একটি ইউনিট-পরীক্ষার বৈধতা দেয়।
একটি হাস্যকর, তবুও বুদ্ধিমান গ্রহণ: টেস্টিওসের পথ
"আপনি আজ পরীক্ষা করতে পারেন লিখুন"
পরীক্ষার্থী / সেটটাররা যদি আপনি অভিজ্ঞ পরীক্ষক হন এবং এটি একটি ছোট প্রকল্প হয় তবে ওভারকিল হতে পারে। তবে, আপনি যদি কেবল ইউনিট পরীক্ষা শিখতে শুরু করেন বা এই প্রাপ্তি / সেটটারগুলিতে যুক্তি থাকতে পারে (@ আর্টবির setMom()
উদাহরণের মতো) তবে পরীক্ষাগুলি লিখতে ভাল ধারণা হবে।
এটি আসলে আমার দল এবং I এর মধ্যে একটি সাম্প্রতিক বিষয় হয়ে দাঁড়িয়েছে 80 আমরা 80% কোড কভারেজের জন্য শ্যুট করি। আমার দলটি যুক্তি দেয় যে গেটার্স এবং সেটটারগুলি স্বয়ংক্রিয়ভাবে প্রয়োগ হয় এবং সংকলক পর্দার পিছনে কিছু বেসিক কোড তৈরি করছে। এই ক্ষেত্রে, উত্পন্ন কোডটি দেওয়া হ'ল অ-অনুপ্রবেশমূলক, এটি কম্পাইলারটি আপনার জন্য তৈরি কোডটি পরীক্ষা করে বোঝা যায় না। অ্যাসিঙ্ক পদ্ধতি সম্পর্কে আমাদেরও এই আলোচনা ছিল এবং সেক্ষেত্রে সংকলক পর্দার আড়ালে পুরো গোছা কোড তৈরি করে। এটি একটি পৃথক কেস এবং আমরা পরীক্ষা করি এমন কিছু। দীর্ঘ উত্তর সংক্ষিপ্ত করুন, এটি আপনার দলের সাথে নিয়ে আসুন এবং এটির জন্য পরীক্ষা করার উপযুক্ত কিনা তা নিজেরাই স্থির করুন।
এছাড়াও, আপনি যদি আমাদের মতো কোড কভারেজ রিপোর্ট ব্যবহার করে থাকেন তবে একটি কাজ আপনি করতে পারেন তা হল [এক্সক্লুডফ্রোমকোডকভারেজ] বৈশিষ্ট্য যুক্ত করুন। আমাদের সমাধানটি এমন মডেলগুলির জন্য ব্যবহার করা হয়েছে যা কেবলমাত্র গেটর এবং সেটটার ব্যবহার করে বা সম্পত্তিতে সম্পত্তি ব্যবহার করে। কোড কভারেজ প্রতিবেদনটি চালিত হওয়ার পরে আপনি যদি আপনার কোড কভারেজ শতাংশের হিসাব করতে যা ব্যবহার করছেন এটি ধরে নিলে এটি মোট কোড কভারেজ% কে প্রভাব ফেলবে না। শুভ পরীক্ষা!
আমার মতে কোড কভারেজ হ'ল এটি ভাল উপায় যা আপনি কোনও ক্রিয়াকলাপটি missedেকে রাখতে পারেন তা মিস করেছেন কিনা।
যখন আপনি কভারেজটি রঙিন রঙের দ্বারা ম্যানুয়ালি পরীক্ষা করেন তখন এটি যুক্তিযুক্ত হতে পারে যে প্লেইন গেটার্স এবং সিটারগুলি পরীক্ষা করার দরকার নেই (যদিও আমি সবসময়ই করি)।
আপনি যখন কেবল আপনার প্রকল্পের কোড কভারেজ শতাংশ পরীক্ষা করেন, তারপরে ৮০% এর মতো পরীক্ষার কভারেজ শতাংশ অর্থহীন। আপনি কোনওটিই যৌক্তিক অংশের পরীক্ষা করতে পারবেন না এবং কিছু গুরুত্বপূর্ণ অংশ ভুলে যেতে পারবেন। এই ক্ষেত্রে কেবল 100% এর অর্থ হল যে আপনি আপনার সমস্ত অত্যাবশ্যক কোড পরীক্ষা করেছেন (এবং পাশাপাশি সমস্ত অ-লজিকাল কোড)। এটি 99.9% হওয়ার সাথে সাথে আপনি জানেন যে কিছু ভুলে গেছে।
যাইহোক: কোড কভারেজ হ'ল এটি চূড়ান্ত যাচাই করে দেখুন যে আপনি কোনও ক্লাস পুরোপুরি (ইউনিট) পরীক্ষা করেছেন কিনা। তবে ১০০% কোড কভারেজের অর্থ এই নয় যে আপনি প্রকৃতপক্ষে শ্রেণীর সমস্ত কার্যকারিতা পরীক্ষা করেছেন। সুতরাং ইউনিট পরীক্ষা সর্বদা ক্লাসের যুক্তি অনুসরণ করে প্রয়োগ করা উচিত। আপনি কিছু ভুলে গেছেন কিনা তা শেষ পর্যন্ত আপনি কভারেজ চালান। আপনি যখন এটি সঠিকভাবে করেছেন, আপনি প্রথমবার 100% মারলেন।
আরও একটি জিনিস: সম্প্রতি নেদারল্যান্ডসের একটি বড় ব্যাংকে কাজ করার সময় আমি লক্ষ্য করেছি যে সোনার 100% কোডের কভারেজ নির্দেশ করেছেন। তবে, আমি জানতাম কিছু অনুপস্থিত ছিল। প্রতি ফাইল কোড কভারেজ শতাংশ পরিদর্শন করে এটি একটি ফাইলকে কম শতাংশে নির্দেশ করে indicated পুরো কোড বেস শতাংশটি এত বড় যে এক ফাইল শতাংশকে 99.9% হিসাবে প্রদর্শিত হতে পারে নি। সুতরাং আপনি এটি সন্ধান করতে চাইতে পারেন ...
আমি নিজেই JUnit কোডে প্রাপ্ত কভারেজটির একটু বিশ্লেষণ করেছি ।
অনাবৃত কোডের একটি বিভাগ "পরীক্ষা করা খুব সহজ" । এটিতে সহজ সরকারী এবং সেটটার অন্তর্ভুক্ত রয়েছে, যা ইউনাইটের বিকাশকারীরা পরীক্ষা করে না ।
অন্যদিকে, JUnit 3 টি লাইনের চেয়ে বেশি কোনও (অ-অবচয়) পদ্ধতি নেই যা কোনও পরীক্ষার আওতায় নেই।
আমি বলব: ইয়েস গেটর / সেটার পদ্ধতিতে ত্রুটিগুলি নিঃশব্দে লুকিয়ে থাকতে পারে এবং কিছু কুৎসিত বাগ তৈরি করতে পারে।
এটি এবং আরও কিছু পরীক্ষা সহজ করার জন্য আমি একটি lib লিখেছি। আপনার JUnit পরীক্ষাগুলিতে আপনাকে কেবল লিখতে হবে এটি হ'ল:
assertTrue(executor.execute(Example.class, Arrays.asList( new DefensiveCopyingCheck(),
new EmptyCollectionCheck(), new GetterIsSetterCheck(),
new HashcodeAndEqualsCheck(), new PublicVariableCheck())));
হ্যাঁ, বিশেষত যদি আইটেমটি পেতে হয় তবে কোনও বিমূর্ত শ্রেণি থেকে বিভাজিত শ্রেণীর একটি বস্তু। আপনার আইডিই বা আপনাকে সতর্ক করতে পারে যে একটি নির্দিষ্ট সম্পত্তি আরম্ভ করা হয়নি।
এবং তারপরে কিছু আপাতদৃষ্টিতে সম্পর্কিত নয় এমন পরীক্ষার সাথে ক্র্যাশ হয় NullPointerException
এবং একটি গেটেবল সম্পত্তি আসলে প্রথম স্থানে পৌঁছানোর জন্য এটি খুঁজে পেতে আপনার কিছুটা সময় লাগে।
যদিও এটি এখনও উত্পাদনের সমস্যাটি আবিষ্কার করার মতো খারাপ হবে না।
আপনার সমস্ত বিমূর্ত ক্লাসের কনস্ট্রাক্টর রয়েছে তা নিশ্চিত করে নেওয়া ভাল ধারণা হতে পারে। যদি তা না হয় তবে প্রাপ্তির পরীক্ষা আপনাকে সেখানে কোনও সমস্যার বিষয়ে সতর্ক করতে পারে।
আদিম মানুষদের এবং সেটারের ক্ষেত্রে, প্রশ্নটি হতে পারে: আমি কি আমার প্রোগ্রামটি পরীক্ষা করছি বা আমি জেভিএম বা সিএলআর পরীক্ষা করছি? সাধারণভাবে বলতে গেলে, জেভিএম পরীক্ষা করার দরকার নেই।