ডিফল্ট অ্যাক্সেস ব্যক্তিগত অ্যাক্সেস সংশোধককে রিন্ডন্ড্যান্ট সরবরাহ করে না।
এতে ভাষা ডিজাইনারদের অবস্থানটি সরকারী টিউটোরিয়ালে প্রতিবিম্বিত - কোনও শ্রেণীর সদস্যদের অ্যাক্সেস নিয়ন্ত্রণ করা এবং এটি বেশ পরিষ্কার (আপনার সুবিধার জন্য, উদ্ধৃতিতে প্রাসঙ্গিক বিবৃতি সাহসী করা হয়েছে ):
অ্যাক্সেস স্তর চয়ন করার বিষয়ে টিপস:
অন্যান্য প্রোগ্রামাররা যদি আপনার ক্লাস ব্যবহার করে তবে আপনি নিশ্চিত করতে চান যে অপব্যবহারের ফলে ত্রুটিগুলি ঘটতে পারে না। অ্যাক্সেস স্তরগুলি আপনাকে এটি করতে সহায়তা করতে পারে।
- সীমাবদ্ধতম অ্যাক্সেস স্তরটি ব্যবহার করুন যা কোনও নির্দিষ্ট সদস্যের জন্য অর্থবোধ করে। আপনার না করার জন্য যদি ভাল কারণ না থাকে তবে ব্যক্তিগত ব্যবহার করুন।
- ধ্রুবক ছাড়া জনসাধারণের ক্ষেত্রগুলি এড়িয়ে চলুন। (টিউটোরিয়ালের বেশ কয়েকটি উদাহরণ পাবলিক ফিল্ড ব্যবহার করে This এটি কিছু পয়েন্ট সংক্ষিপ্তভাবে ব্যাখ্যা করতে সহায়তা করতে পারে তবে উত্পাদন কোডের জন্য প্রস্তাবিত নয়)) সর্বজনীন ক্ষেত্রগুলি আপনাকে একটি নির্দিষ্ট প্রয়োগের সাথে সংযুক্ত করে এবং আপনার কোড পরিবর্তন করার ক্ষেত্রে আপনার নমনীয়তা সীমাবদ্ধ করে।
সম্পূর্ণরূপে প্রাইভেট মডিফায়ার বাদ দেওয়ার জন্য যুক্তিসঙ্গত হওয়ার হিসাবে টেস্টাবিলিটির কাছে আপনার আবেদনটি ভুল D আমার এখন ব্যক্তিগত পদ্ধতি এড়ানো উচিত?
অবশ্যই আপনার ব্যক্তিগত পদ্ধতি থাকতে পারে এবং অবশ্যই আপনি সেগুলি পরীক্ষা করতে পারেন।
হয় প্রাইভেট পদ্ধতিটি চালানোর জন্য কিছু উপায় রয়েছে, সেক্ষেত্রে আপনি সেভাবে এটি পরীক্ষা করতে পারেন, বা প্রাইভেটটি চালানোর কোনও উপায় নেই , এক্ষেত্রে: হেক কেন আপনি এটি পরীক্ষা করার চেষ্টা করছেন, ঠিক জঘন্য জিনিস মুছুন ...
প্যাকেজ স্তর অ্যাক্সেসের উদ্দেশ্য এবং ব্যবহারের জন্য ভাষা ডিজাইনারদের অবস্থানের বিষয়ে অন্য একটি অফিসিয়াল টিউটোরিয়ালে, প্যাকেজ তৈরি এবং ব্যবহারের ব্যাখ্যা দেওয়া হয়েছে এবং প্রাইভেট মডিফায়ারগুলি বাদ দেওয়ার ধারণার সাথে এটির মিল নেই (আপনার সুবিধার জন্য, উদ্ধৃতিতে প্রাসঙ্গিক বিবৃতিটি সাহসী করা হয়েছে ) :
নিম্নলিখিত সহ কয়েকটি কারণে আপনার এই ক্লাসগুলি এবং ইন্টারফেসটি একটি প্যাকেজে বান্ডিল করা উচিত:
- আপনি এবং অন্যান্য প্রোগ্রামাররা সহজেই নির্ধারণ করতে পারবেন যে এই ধরণেরগুলি সম্পর্কিত ...
- আপনি প্যাকেজটির মধ্যে থাকা প্রকারগুলিকে একে অপরের সীমিত অ্যাক্সেসের অনুমতি দিতে পারেন তবুও প্যাকেজের বাইরের ধরণের জন্য অ্যাক্সেসকে সীমাবদ্ধ রেখেছেন ...
<কৌতুক "আমি মনে করি আমি যথেষ্ট হাহাকার শুনেছি Gu জোরে এবং পরিষ্কার করার সময়টি প্রায় অনুমান করুন ...">
ইউনিট পরীক্ষার জন্য ব্যক্তিগত পদ্ধতিগুলি উপকারী।
নীচের নোটটি ধরে নেওয়া হয়েছে যে আপনি কোড কভারেজের সাথে পরিচিত । যদি তা না হয় তবে শিখতে সময় নিন, যেহেতু ইউনিট টেস্টিং এবং পরীক্ষায় মোটেই আগ্রহী তাদের পক্ষে এটি বেশ কার্যকর useful
ঠিক আছে, সুতরাং আমি সেই বেসরকারী পদ্ধতি এবং ইউনিট পরীক্ষা পেয়েছি এবং কভারেজ বিশ্লেষণ আমাকে বলছে যে একটি ফাঁক আছে, আমার ব্যক্তিগত পদ্ধতি পরীক্ষাগুলির আওতায় নেই। এখন ...
এটিকে ব্যক্তিগত রেখে কী লাভ করব gain
যেহেতু পদ্ধতিটি ব্যক্তিগত, তাই এগিয়ে যাওয়ার একমাত্র উপায় হ'ল কোডটি অ বেসরকারী এপিআইয়ের মাধ্যমে কীভাবে ব্যবহৃত হয় তা শেখার জন্য study সাধারণত, এই ধরনের একটি গবেষণা ফাঁক হওয়ার কারণ প্রকাশ করে যে নির্দিষ্ট ব্যবহারের পরিস্থিতি পরীক্ষায় অনুপস্থিত।
void nonPrivateMethod(boolean condition) {
if (condition) {
privateMethod();
}
// other code...
}
// unit tests don't invoke nonPrivateMethod(true)
// => privateMethod isn't covered.
সম্পূর্ণতার স্বার্থে, অন্যান্য (কম ঘন ঘন) এই জাতীয় কভারেজ ফাঁকের কারণ স্পেসিফিকেশন / ডিজাইনের বাগ থাকতে পারে। জিনিসগুলিকে সরল রাখার জন্য আমি এগুলির গভীর গভীরে ডুব দেব না; যথেষ্ট পরিমাণে বলার অপেক্ষা রাখে না যে আপনি যদি "কেবলমাত্র পরীক্ষার ব্যবস্থাযোগ্য করে তোলার জন্য" অ্যাক্সেস সীমাবদ্ধতা দুর্বল করেন তবে আপনি এই বাগগুলি বিদ্যমান রয়েছে তা শেখার একটি সুযোগ হাতছাড়া করবেন।
ভাল, ফাঁকটি ঠিক করতে, আমি অনুপস্থিত দৃশ্যের জন্য একটি ইউনিট পরীক্ষা যুক্ত করি, কভারেজ বিশ্লেষণের পুনরাবৃত্তি করি এবং যা ফাঁক হয়েছে তা যাচাই করি। আমার এখন কি আছে? বেসরকারী API এর নির্দিষ্ট ব্যবহারের জন্য আমি নতুন ইউনিট পরীক্ষা পেয়েছি got
নতুন পরীক্ষা নিশ্চিত করে যে এই ব্যবহারের জন্য প্রত্যাশিত আচরণ কোনও বিজ্ঞপ্তি ছাড়াই পরিবর্তিত হবে না কারণ এটি পরিবর্তন হলে, পরীক্ষা ব্যর্থ হবে।
বাইরের পাঠক এই পরীক্ষার দিকে নজর রাখতে পারেন এবং এটি কীভাবে ব্যবহার এবং আচরণের কথা ভাবা হয় তা শিখতে পারেন (এখানে, বাইরের পাঠক আমার ভবিষ্যতের স্ব অন্তর্ভুক্ত করেন, যেহেতু আমি কোডটি এটি সম্পন্ন করার পরে এক / দু'মাস পরে ভুলে যাই)।
নতুন পরীক্ষাটি রিফ্যাক্টরিংয়ের ক্ষেত্রে সহনশীল (আমি কি ব্যক্তিগত পদ্ধতিগুলির রিফ্যাক্টর করব? আপনি বাজি ধরুন!) আমি যা কিছু করি না কেন privateMethod
, আমি সর্বদা পরীক্ষা করতে চাই nonPrivateMethod(true)
। আমি যাই করুক না কেন privateMethod
, পরীক্ষাটি পরিবর্তন করার দরকার হবে না কারণ পদ্ধতিটি সরাসরি চালু করা হয়নি।
খারাপ না? আপনি বাজি ধরুন।
অ্যাক্সেস সীমাবদ্ধতা দুর্বল করা থেকে আমি কী শিথিল করব
এখন কল্পনা করুন যে উপরের পরিবর্তে, আমি কেবল অ্যাক্সেসের সীমাবদ্ধতা দুর্বল করি। আমি পদ্ধতিটি ব্যবহার করে এমন কোডের অধ্যয়ন এড়িয়ে চলেছি এবং পরীক্ষার সাথে সরাসরি এগিয়ে চলেছি যা আমার অনুরোধ করে exPrivateMethod
। গ্রেট? না!
উপরে বর্ণিত বেসরকারী এপিআইয়ের নির্দিষ্ট ব্যবহারের জন্য আমি কি পরীক্ষা অর্জন করতে পারি? না: nonPrivateMethod(true)
আগে কোনও পরীক্ষা ছিল না , এখন আর তেমন কোনও পরীক্ষা নেই।
বাইরের পাঠকরা কি ক্লাসের ব্যবহার আরও ভালভাবে বোঝার সুযোগ পাবেন? না "- আরে এখানে পরীক্ষিত পদ্ধতির উদ্দেশ্য কী? - এটি ভুলে যান, এটি কঠোরভাবে অভ্যন্তরীণ ব্যবহারের জন্য - - ওফস।"
রিফ্যাক্টরিং করা কি সহনীয়? কোনও উপায় নয়: আমি যা কিছু পরিবর্তন করি exPrivateMethod
, সম্ভবত এটি পরীক্ষাটি ভেঙে দেয়। নতুন নামকরণ করুন, অন্য কোনও পদ্ধতিতে মার্জ করুন, যুক্তিগুলি পরিবর্তন করুন এবং পরীক্ষাটি কেবল সংকলন বন্ধ করবে। মাথা ব্যাথা? আপনি বাজি!
সংক্ষেপে বলা যায় , ব্যক্তিগত পদ্ধতির সাথে লেগে থাকা ইউনিট পরীক্ষায় আমার একটি দরকারী, নির্ভরযোগ্য বর্ধন করে brings বিপরীতে, "পরীক্ষার যোগ্যতার জন্য" অ্যাক্সেসের সীমাবদ্ধতাগুলি দুর্বল করা আমাকে কেবল একটি অস্পষ্ট, পরীক্ষা কোডের টুকরোটি বোঝা শক্ত, যা অতিরিক্তভাবে কোনও ছোটখাট রিফ্যাক্টরিং দ্বারা ভেঙে যাওয়ার স্থায়ী ঝুঁকিতে রয়েছে; স্পষ্টভাবে আমি যা পাই তা সন্দেহজনকভাবে প্রযুক্তিগত debt ণের মতো দেখাচ্ছে ।
</ গলাবাজি>