টিডিডি রেড-গ্রিন-রিফ্যাক্টর এবং যদি / কীভাবে ব্যক্তিগত হয়ে যায় এমন পদ্ধতিগুলি পরীক্ষা করতে হয়


91

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

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

সুতরাং, প্রথমে, আমি "লাল টুপি লাগালাম", অর্থাত আমার ব্যর্থ হয় এমন একটি পরীক্ষা দরকার। আমি বুঝতে পেরেছি, আমার এমন একটি পদ্ধতি দরকার যা সমস্ত লাইনে অ-সংখ্যাযুক্ত ক্ষেত্রগুলি খুঁজে পায় finds সুতরাং আমি একটি সহজ পরীক্ষা লিখি, অবশ্যই এটি অবিলম্বে সংকলন করতে ব্যর্থ হয়, তাই আমি নিজেই ফাংশনটি লিখতে শুরু করি এবং কয়েক চক্র পিছনে পিছনে (লাল / সবুজ) পরে আমার একটি কার্যকরী ফাংশন এবং একটি সম্পূর্ণ পরীক্ষা রয়েছে have

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

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

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

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

তো এখন কি করা? টিডিডি (দ্রুত লাল-সবুজ-রিফ্যাক্টর চক্র সহ) কেবল ব্যক্তিগত পদ্ধতির সাথে সামঞ্জস্য নয়? নাকি আমার ডিজাইনে কোনও দোষ আছে?



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

26
লোকেরা প্রোগ্রামিং বই এবং ব্লগগুলি থেকে কেন প্রোগ্রামিংয়ের বাস্তব নির্দেশিকা হিসাবে আইডিয়াম এবং ক্লিকগুলি গ্রহণ করে তা আমার বাইরে is
একে_

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

1
"বেশিরভাগ লোকজন একমত যে বেসরকারী পদ্ধতিগুলি সরাসরি পরীক্ষা করা উচিত নয়" - না, কোনও পদ্ধতির এটি করার যদি বোধগম্য হয় তবে সরাসরি পরীক্ষা করুন। এটিকে privateএমনভাবে আড়াল করুন যেন এটি করার মতো কোনও বোধগম্য হয়।
ওসো

উত্তর:


44

ইউনিট

আমি মনে করি যে সমস্যাটি ঠিক কোথায় শুরু হয়েছিল আমি তা চিহ্নিত করতে পারি:

আমি বুঝতে পেরেছি, আমার এমন একটি পদ্ধতি দরকার যা সমস্ত লাইনে অ-সংখ্যাযুক্ত ক্ষেত্রগুলি খুঁজে পায় finds

এটি সঙ্গে সঙ্গে নিজেকে জিজ্ঞাসা করে অনুসরণ করা উচিত "এটি কি আলাদা টেস্টেবল ইউনিট gatherNonNumericColumnsবা একই অংশের অংশ হবে?"

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

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


একটি ছোট চক্র রাখা

উপরের কাজটি করার ফলে আপনার পেনাল্টিমেট অনুচ্ছেদে বর্ণিত সমস্যাগুলির দিকে পরিচালিত করা উচিত নয় :

কারণ আমি যদি কোনও পাবলিক পদ্ধতির জন্য একটি পরীক্ষা লিখে শুরু করি, তবে বেসরকারী পদ্ধতিতে কাজ করার জন্য সমস্ত বিবরণ পাওয়ার আগে আমার বেশ কয়েক মিনিট (বা ঘন্টা বা খুব জটিল ক্ষেত্রে এমনকি কয়েক দিন) সময় আসবে যাতে জনসাধারণের পরীক্ষার পরীক্ষা করা হয় পদ্ধতি পাস।

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


রোডম্যাপ

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


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

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

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

66

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

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

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

সুতরাং আপনার দেখতে হবে যে ব্যক্তিগত পদ্ধতিগুলি পরীক্ষার ক্ষেত্রে অপ্রাসঙ্গিক। আপনি যদি নিজের শ্রেণীর পাবলিক ইন্টারফেসকে কল করে আপনার ব্যক্তিগত পদ্ধতিগুলি অনুশীলন করতে না পারেন, তবে সেই ব্যক্তিগত পদ্ধতিগুলি অকেজো এবং যেভাবেই ব্যবহৃত হবে না।

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

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

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


14
আমার কাছে দেখে মনে হচ্ছে এই উত্তরটি ওপির প্রশ্নের মধ্যে টিডিডি পদ্ধতির সম্পূর্ণ উপেক্ষা করে। এটা ঠিক "ব্যক্তিগত পদ্ধতি পরীক্ষা না" মন্ত্রোচ্চারণের মাধ্যমে একটি পুনরাবৃত্তি, কিন্তু এটা কীভাবে TDD- এ - যা হল আসলে পদ্ধতি ভিত্তিক - একটি অ পদ্ধতি ভিত্তিক ইউনিট পরীক্ষা পদ্ধতির সঙ্গে কাজ করতে পারে।
ডক ব্রাউন

6
@ ডকব্রাউন নং, এটি আপনার ইউনিটগুলিকে "অতিরিক্ত-গ্রানুয়ালাইজ করবেন না" এবং নিজের জীবনকে কঠিন করে তুলবে বলে পুরোপুরি উত্তর দেয়। TDD- এ হল না ভিত্তি করে পদ্ধতি, এটা হয় ইউনিট ভিত্তিক যেখানে একটি ইউনিট যাই হোক না কেন জানার জন্য হয়। আপনার যদি সি লাইব্রেরি থাকে তবে হ্যাঁ প্রতিটি ইউনিট একটি ফাংশন হবে। আপনার যদি ক্লাস থাকে তবে ইউনিট একটি অবজেক্ট। যেমন ফওলার বলেছেন, কখনও কখনও একটি ইউনিট বেশ কয়েকটি দৃ tight়ভাবে সম্পর্কিত ক্লাস হয়। আমি মনে করি অনেক লোক ইউনিট টেস্টিংকে পদ্ধতি-বাই-পদ্ধতি হিসাবে বিবেচনা করে কারণ কিছু বোবা সরঞ্জামগুলি পদ্ধতির উপর ভিত্তি করে স্টাব তৈরি করে।
gbjbaanb

3
@gbjbaanb: একটি পরীক্ষা দেওয়ার পরামর্শ দেওয়ার চেষ্টা করুন যা ওপিকে তার "ইতিমধ্যে লিখিত লেখার ইচ্ছা আছে এমন শ্রেণীর পাবলিক ইন্টারফেস না রেখে, প্রথমে খাঁটি টিডিডি ব্যবহার করে" "একটি লাইনে অ-সংখ্যাগত ক্ষেত্রগুলি সংগ্রহ করতে" প্রয়োগ করতে দেয় allows
ডক ব্রাউন

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

7
@ ম্যাথু: তাঁর ভুলটি হ'ল তিনি প্রথম স্থানে ফাংশনটি লিখেছিলেন। আদর্শভাবে, তার উচিত ছিল স্প্যাগেটি কোড হিসাবে পাবলিক পদ্ধতিটি লিখে রেফ্যাক্টরটিকে এটিকে রিফ্যাক্টর চক্রের একটি ব্যক্তিগত ফাংশন হিসাবে লিখতে হবে - এটিকে রিফেক্টর চক্রের ব্যক্তিগত হিসাবে চিহ্নিত করবেন না।
slebetman

51

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

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

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


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

"যথেষ্ট আলাদা করুন" সম্পর্কে: আমি শিখেছি (চাচাবোব থেকে আবার) যে ফাংশনগুলি ছোট হওয়া উচিত, এবং সেগুলি এর চেয়ে ছোট হওয়া উচিত। সুতরাং মূলত আমি 3-4 লাইন ফাংশন করার চেষ্টা করি। তাই কম-বেশি সমস্ত কার্যকারিতা তাদের নিজস্ব পদ্ধতিতে পৃথক করা হয়, তা যতই ছোট এবং সরল হোক না কেন।
হেনরিক বার্গ

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

6
@ হেনরিকবার্গ ভাবেন কেন আপনার প্রথম স্থানে বস্তু রয়েছে - তারা গ্রুপ ফাংশন করার সুবিধাজনক উপায় নয়, তবে স্বয়ংসম্পূর্ণ ইউনিট যা জটিল সিস্টেমগুলিকে কাজ করা সহজ করে তোলে। সুতরাং, আপনি একটি জিনিস হিসাবে ক্লাস পরীক্ষা করার চিন্তা করা উচিত।
gbjbaanb

@gbjbaanb আমি যুক্তি দেব যে তারা উভয়ই এক এবং একই।
রাবারডাক

29

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

আপনার কোনও শ্রেণির পাবলিক ইন্টারফেস পরীক্ষা করা উচিত। বেসরকারী বাস্তবায়ন কোনও কারণে ব্যক্তিগত। এটি পাবলিক ইন্টারফেসের অংশ নয় কারণ এটি প্রয়োজন নেই এবং পরিবর্তন করতে পারে। এটি বাস্তবায়নের বিশদ।

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


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

11

ক্লাসটি অভ্যন্তরীণভাবে কী করবে আপনি তার উপর ভিত্তি করে টিডিডি করবেন না।

আপনার পরীক্ষার কেসগুলি ক্লাস / কার্যকারিতা / প্রোগ্রামটি বহিরাগতের সাথে কী করবে তার ভিত্তিতে হওয়া উচিত। আপনার উদাহরণে, ব্যবহারকারী কি কখনও আপনার পাঠক শ্রেণীর সাথে কল করবে callingfind all the non-numerical fields in a line?

উত্তরটি যদি "না" হয় তবে প্রথমে লিখতে এটি খারাপ পরীক্ষা। আপনি ক্লাস / ইন্টারফেস স্তরে কার্যকারিতার উপর পরীক্ষা লিখতে চান - "ক্লাস পদ্ধতিতে এটি কাজ করার জন্য কী প্রয়োগ করতে হবে" স্তর নয়, যা আপনার পরীক্ষাটি।

টিডিডির প্রবাহ হ'ল:

  • লাল (বাহ্যিক বিশ্বের সাথে ক্লাস / অবজেক্ট / ফাংশন / ইত্যাদি কী করছে)
  • সবুজ (এই বাহ্যিক বিশ্বের ফাংশনটি কাজ করার জন্য সর্বনিম্ন কোড লিখুন)
  • রিফ্যাক্টর (এই কাজটি করার জন্য আরও ভাল কোডটি কী)

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

আপনি যদি নিজেকে ব্যক্তিগত পদ্ধতিগুলির জন্য ঘন ঘন টেস্টগুলি লেখার জন্য খুঁজে পান তবে আপনি কয়েকটি কাজের একটি করছেন:

  • আপনার ইন্টারফেস / পাবলিক স্তরের ব্যবহারের কেসগুলি সঠিকভাবে বুঝতে না পারলে তাদের জন্য একটি পরীক্ষা লেখার পক্ষে যথেষ্ট
  • নাটকীয়ভাবে আপনার নকশা পরিবর্তন এবং বিভিন্ন পরীক্ষার রিফ্যাক্টরিং (যা কার্যকর বিষয়টিকে নতুন পরীক্ষায় পরীক্ষা করা হয় কিনা তার উপর নির্ভর করে)

9

আপনি সাধারণভাবে পরীক্ষার সাথে একটি সাধারণ ভুল ধারণা ধারণ করছেন।

পরীক্ষায় নতুন যারা বেশিরভাগ লোকেরা এভাবে চিন্তা শুরু করে:

  • F ফাংশন জন্য একটি পরীক্ষা লিখুন
  • এফ প্রয়োগ করুন
  • জি ফাংশন জন্য একটি পরীক্ষা লিখুন
  • এফ এ একটি কল ব্যবহার করে জি প্রয়োগ করুন
  • H ফাংশনের জন্য একটি পরীক্ষা লিখুন
  • জি কে কল ব্যবহার করে এইচ প্রয়োগ করুন

ইত্যাদি।

এখানে সমস্যাটি হ'ল এইচ ফাংশনের জন্য আপনার প্রকৃতপক্ষে কোনও ইউনিট পরীক্ষা নেই H যে পরীক্ষার এইচ এইচটি পরীক্ষা করার কথা বলেছিল তা আসলে একই সময়ে এইচ, জি এবং এফ পরীক্ষা করে।

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

কীভাবে এটি করা যায় তা নির্ভর করে আপনার প্রোগ্রামিং ভাষার উপর। অনেক ভাষায় আপনি ফাংশনগুলি (বা তাদের কাছে পয়েন্টার) অন্যান্য ফাংশনের পক্ষে যুক্তি হিসাবে পাস করতে পারেন। এটি আপনাকে বিচ্ছিন্নভাবে প্রতিটি কার্য পরীক্ষা করতে সক্ষম করবে will


3
আমি আশা করি আমি আরও অনেকবার এইবার ভোট দিতে পারতাম। আমি কেবল এটি সংক্ষেপে বলব, আপনি নিজের সমাধানটি সঠিকভাবে আর্কাইভ করেন নি।
জাস্টিন ওহমস

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

8

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

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

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

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


4

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

(আপনার ফাংশনটি কী করে আমি পুরোপুরি পরিষ্কার নই it অ-সংখ্যাসূচক মানগুলি কেটে ফেলা হলে এটি ফাইলের সামগ্রীর সাথে একটি স্ট্রিং ফেরত দেয়?)

যদি আপনার পদ্ধতিটি কোনও স্ট্রিং দেয় তবে আপনি সেই রিটার্ন মানটি পরীক্ষা করে দেখুন। সুতরাং আপনি কেবল এটি নির্মাণ করা চালিয়ে যান।

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


3

মনে হচ্ছে আমি এখানে একটি কোণে নিজেকে আঁকছি। তবে আমি ঠিক কোথায় ব্যর্থ হই?

একটি পুরানো প্রবাদ আছে

আপনি যখন পরিকল্পনা করতে ব্যর্থ হন, আপনি ব্যর্থ হওয়ার পরিকল্পনা করেন।

লোকেরা মনে করে যে আপনি যখন টিডিডি করবেন তখন আপনি কেবল বসে থাকবেন, পরীক্ষা লিখুন এবং নকশাটি কেবল যাদুতে ঘটবে। এটা সত্য নয়। আপনার একটি উচ্চ স্তরের পরিকল্পনার দরকার আছে found আমি খুঁজে পেয়েছি যে আমি ইন্টারফেসটি (পাবলিক এপিআই) প্রথমে ডিজাইন করার সময় টিডিডি থেকে আমার সেরা ফলাফলগুলি পাই। ব্যক্তিগতভাবে, আমি একটি বাস্তব তৈরি করি interfaceযা প্রথম শ্রেণীর সংজ্ঞা দেয়।

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

আমার সত্যিই মনে হচ্ছে "টেস্ট ফার্স্ট" একটি মিসনোমার। প্রথমে ডিজাইন করুন তারপর পরীক্ষা করুন।

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


2

মনে রাখবেন পরীক্ষাগুলিও রিফ্যাক্টর হতে পারে! যদি আপনি কোনও পদ্ধতি ব্যক্তিগত করেন, আপনি সর্বজনীন এপিআই হ্রাস করছেন, এবং সেই কারণে "হারানো কার্যকারিতা" (একেএ জটিলতা হ্রাস) এর জন্য কিছু সম্পর্কিত পরীক্ষা ফেলে দেওয়া পুরোপুরি গ্রহণযোগ্য।

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

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

এইভাবে, আমরা কিছু পরীক্ষা ফেলে দিতে পারি (উদাঃ শূন্যে বিভাজন) এবং বাকী পাবলিক এপিআইয়ের ক্ষেত্রে অন্যকে রিফেক্টর করতে পারি। অবশ্যই, একটি আদর্শ বিশ্বে বিদ্যমান পরীক্ষাগুলি অবশিষ্ট সমস্ত পথের যত্ন নেয় তবে বাস্তবতা সর্বদা একটি আপস;)


1
অন্য উত্তরগুলি সঠিক যেখানে ব্যক্তিগত চক্রটি লাল চক্রটিতে লেখা উচিত হয়নি, মানুষ ভুল করে। এবং আপনি যখন ভুলের পথে চলে গেছেন তখনই এটি উপযুক্ত সমাধান।
slebetman

2

এমন সময় আছে যখন একটি ব্যক্তিগত পদ্ধতি অন্য শ্রেণীর সর্বজনীন পদ্ধতি হিসাবে তৈরি করা যেতে পারে।

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

(এটি সর্বাধিক সুস্পষ্ট যখন আপনি কল্পনা করেন যে তালিকার কোনও শ্রেণি নেই, এবং যদি আপনি তালিকাটি ফাংশনগুলি ক্লাসে ব্যক্তিগত পদ্ধতি হিসাবে ব্যবহার করেন তবে এটি ব্যবহার করে।)


2
"এমন সময় আছে যখন একটি ব্যক্তিগত পদ্ধতি অন্য শ্রেণীর সর্বজনীন পদ্ধতি হিসাবে তৈরি করা যায়।" আমি যে যথেষ্ট চাপ সৃষ্টি করতে পারেন. কখনও কখনও, একটি ব্যক্তিগত পদ্ধতি কেবল তার নিজস্ব পরিচয়ের জন্য চিৎকার করে অন্য শ্রেণি।

0

আমি ভাবছি কেন আপনার ভাষায় গোপনীয়তার দুটি স্তর রয়েছে, সম্পূর্ণ প্রকাশ্য এবং সম্পূর্ণ ব্যক্তিগত।

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

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


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

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

0

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


0

আমি এটি অভিজ্ঞতা পেয়েছি এবং আপনার ব্যথা অনুভব করেছি।

আমার সমাধানটি ছিল:

মনোলিথ তৈরির মতো পরীক্ষার চিকিত্সা বন্ধ করুন।

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

উদাহরণস্বরূপ আমার প্রায়শই থাকে:

  • নিম্ন স্তরের পরীক্ষা 1
  • এটি পূরণের কোড
  • নিম্ন স্তরের পরীক্ষা 2
  • এটি পূরণের কোড
  • নিম্ন স্তরের পরীক্ষা 3
  • এটি পূরণের কোড
  • নিম্ন স্তরের পরীক্ষা 4
  • এটি পূরণের কোড
  • নিম্ন স্তরের পরীক্ষা 5
  • এটি পূরণের কোড

সুতরাং আমি আছে

  • নিম্ন স্তরের পরীক্ষা 1
  • নিম্ন স্তরের পরীক্ষা 2
  • নিম্ন স্তরের পরীক্ষা 3
  • নিম্ন স্তরের পরীক্ষা 4
  • নিম্ন স্তরের পরীক্ষা 5

তবে যদি আমি এখন উচ্চ স্তরের ফাংশন (গুলি) যোগ এটি কল, যে পরীক্ষার অনেক আছে, আমি পারে এখন শুধু হতে ঐ নিম্ন স্তরের পরীক্ষার কমাতে পাবে:

  • নিম্ন স্তরের পরীক্ষা 1
  • নিম্ন স্তরের পরীক্ষা 5

শয়তান বিশদে রয়েছে এবং এটি করার ক্ষমতা পরিস্থিতিগুলির উপর নির্ভর করবে।


-2

সূর্য কি পৃথিবী বা পৃথিবীর চারদিকে সূর্যের চারদিকে ঘোরে? আইনস্টাইনের মতে উত্তর হ্যাঁ, বা উভয় মডেল উভয়ই দৃষ্টিভঙ্গির দ্বারা পৃথক হয়েছে, একইভাবে এনক্যাপসুলেশন এবং পরীক্ষা চালিত বিকাশ কেবল বিরোধের কারণ আমরা মনে করি যে তারা। আমরা এখানে গ্যালিলিও এবং পোপের মতো বসে আছি এবং একে অপরকে অপমান করছি: বোকা, আপনি কি দেখেন না যে ব্যক্তিগত পদ্ধতিগুলিরও পরীক্ষা করার দরকার হয়; ধর্মাবলম্বী, encapsulation ভাঙবেন না! তেমনিভাবে যখন আমরা স্বীকার করি যে সত্যটি আমাদের চেয়ে বড় বিবেচ্য প্রাইভেট ইন্টারফেসগুলির জন্য পরীক্ষাগুলি encapsulate করার মতো কিছু চেষ্টা করতে পারে যাতে জনসাধারণের ইন্টারফেসগুলির জন্য পরীক্ষাগুলি এনক্যাপসুলেশনটি না ভেঙে দেয়।

এটি চেষ্টা করুন: দুটি পদ্ধতি যুক্ত করুন, একটি যাতে ইনপুট নেই তবে প্রাইভেট টেস্টের সংখ্যাটি দেয় এবং প্যারামিটার হিসাবে পরীক্ষার নম্বর নেয় এবং পাস / ব্যর্থ ফেরত দেয়।


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