অকার্যকর রিটার্ন টাইপ / সাব্রুটাইন পুরানো খবর। আমি 8 বছরের মতো একটি অকার্যকর রিটার্নের টাইপ তৈরি করি নি (যদি না আমি অত্যন্ত অলস হয়ে থাকি) (এই উত্তরের সময় থেকে, তাই এই প্রশ্নটি জিজ্ঞাসা করার আগে একটু আগে)।
পরিবর্তে যেমন একটি পদ্ধতির:
public void SendEmailToCustomer()
একটি পদ্ধতি তৈরি করুন যা মাইক্রোসফ্টের অন্তর্নিহিত ট্রাইপার্স () দৃষ্টান্ত অনুসরণ করে:
public bool TrySendEmailToCustomer()
আপনার পদ্ধতির দীর্ঘমেয়াদে ব্যবহারের জন্য ফিরে আসতে প্রয়োজনীয় কোনও তথ্য নেই, তবে পদ্ধতিটির কাজটি সম্পাদন করার পরে তার অবস্থাটি ফিরিয়ে দেওয়া কলারের পক্ষে বিশাল ব্যবহার।
এছাড়াও, বুল একমাত্র রাষ্ট্রের ধরণ নয়। এমন অনেক সময় আছে যখন পূর্বে তৈরি সুব্রুটাইন আসলে তিন বা ততোধিক পৃথক অবস্থায় (ভাল, সাধারণ, খারাপ, ইত্যাদি) ফিরে আসতে পারে। এই ক্ষেত্রে, আপনি কেবল ব্যবহার করতে চাই
public StateEnum TrySendEmailToCustomer()
যাইহোক, চেষ্টা-প্যারাডিজম শূন্য রিটার্ন কীভাবে পরীক্ষা করতে হবে সে সম্পর্কে এই প্রশ্নের কিছুটা উত্তর দিলে অন্যান্য বিবেচনাগুলিও রয়েছে। উদাহরণস্বরূপ, "টিডিডি" চক্র চলাকালীন / পরে, আপনি "রিফ্যাক্টরিং" হবেন এবং লক্ষ্য করুন যে আপনি নিজের পদ্ধতিতে দুটি কাজ করছেন ... এইভাবে "একক দায়িত্বের নীতিমালা" ভঙ্গ করছেন। যাতে প্রথমে যত্ন নেওয়া উচিত। দ্বিতীয়ত, আপনি কোনও নির্ভরতা শনাক্ত করতে পারেন ... আপনি "ধ্রুবক" ডেটা স্পর্শ করছেন।
যদি আপনি পদ্ধতি-ইন-প্রশ্নে ডেটা অ্যাক্সেস স্টাফগুলি করে থাকেন তবে আপনাকে এন-টায়ারড বা এন-লেয়ার'আকিটেকচারে রিফ্যাক্টর তৈরি করতে হবে। তবে আমরা ধরে নিতে পারি যে আপনি যখন "স্ট্রিংগুলি তখন একটি ডাটাবেসে sertedোকানো হয়" বলবেন, আপনার প্রকৃত অর্থ আপনি কোনও ব্যবসায়ের লজিক স্তর বা কোনও কিছুতে কল করছেন। হ্যাঁ, আমরা এটা ধরে নেব।
যখন আপনার অবজেক্টটি ইনস্ট্যান্ট করা হয়, আপনি এখন বুঝতে পারেন যে আপনার অবজেক্টের নির্ভরতা রয়েছে। আপনি যখন অবজেক্টে, বা পদ্ধতিতে নির্ভরশীল ইনজেকশন করতে যাচ্ছেন এটি সিদ্ধান্ত নেওয়ার দরকার পড়ে is তার অর্থ আপনার কনস্ট্রাক্টর বা পদ্ধতি-ইন-প্রশ্নের একটি নতুন প্যারামিটার প্রয়োজন:
public <Constructor/MethodName> (IBusinessDataEtc otherLayerOrTierObject, string[] stuffToInsert)
এখন যেহেতু আপনি আপনার ব্যবসায় / তথ্য স্তর স্তরটির একটি ইন্টারফেস গ্রহণ করতে পারেন, আপনি ইউনিট টেস্টের সময় এটিকে উপহাস করতে পারেন এবং "দুর্ঘটনাজনিত" ইন্টিগ্রেশন পরীক্ষার কোনও নির্ভরতা বা ভয় নেই।
সুতরাং আপনার লাইভ কোডে, আপনি একটি বাস্তব IBusinessDataEtc
অবজেক্টে পাস করেন । তবে আপনার ইউনিট পরীক্ষায়, আপনি একটি এমওকেকে IBusinessDataEtc
অবজেক্টে পাস করেন । সেই মকটিতে, আপনি int XMethodWasCalledCount
ইন্টারফেসের পদ্ধতিগুলি কল করার সময় নন-ইন্টারফেস বৈশিষ্ট্যগুলির মতো বা এমন কিছু বিষয় অন্তর্ভুক্ত করতে পারেন যার রাজ্য (গুলি) আপডেট করা হয়।
সুতরাং আপনার ইউনিট পরীক্ষাটি আপনার পদ্ধতি (প্রশ্নাবলীর) -র মধ্য দিয়ে যাবে, তাদের যেই যুক্তি রয়েছে তা সম্পাদন করবে এবং আপনার IBusinessDataEtc
বস্তুর মধ্যে একটি বা দুটি বা একটি নির্বাচিত পদ্ধতিগুলির কল করবে । আপনি যখন আপনার ইউনিট পরীক্ষা শেষে আপনার দৃ do়তাগুলি করেন তখন আপনার কাছে এখন পরীক্ষা করার জন্য কয়েকটি জিনিস রয়েছে।
- "সাব্রুটাইন" এর রাজ্য যা এখন একটি ট্র্যাড-প্যারাডিজম পদ্ধতি।
- আপনার মক
IBusinessDataEtc
অবজেক্টের অবস্থা।
নির্মাণ-স্তরের নির্ভরতা ইনজেকশন ধারণাগুলি সম্পর্কে আরও তথ্যের জন্য ... তারা ইউনিট পরীক্ষার সাথে সম্পর্কিত ... নির্মাতার নকশার নিদর্শনগুলি দেখুন। এটি আপনার প্রতিটি ইন্টারফেস / ক্লাসের জন্য আরও একটি ইন্টারফেস এবং শ্রেণি যুক্ত করেছে, তবে তারা খুব ছোট এবং আরও ভাল ইউনিট-পরীক্ষার জন্য বিশাল কার্যকারিতা বৃদ্ধি করে।