ইউনিট পরীক্ষার পার্শ্ব প্রতিক্রিয়া-ভারী কোড


10

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

সম্পাদন করা

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


আমি ধরে নিয়েছি যে আপনি আপনার রোবটকে যে কোনও ক্রিয়া করতে পারেন, তাই না? আপনি কি নিজের পরীক্ষার ক্রিয়াগুলি পূর্বাবস্থায় ফিরিয়ে রাখতে পারবেন না?
নিল

1
এটা খুব খারাপ যে লাইব্রেরি উত্তরাধিকারের পরিবর্তে রচনাটি ব্যবহার করে নি, কারণ আপনি যদি কমান্ড বর্গকে কেবল উপহাস করতে পারেন তবে তা যদি হয়।
রবার্ট হার্ভে

@ নীল আপনি কী জিজ্ঞাসা করছেন তা আমি নিশ্চিত নই। আপনি কি আপনার প্রশ্নটি নতুন করে বলতে পারেন?
কিঙ্কেল

উত্তর:


7

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

এটি করার পরে, আমি একটি রোবটকন্ট্রোল আইপিএল ক্লাস তৈরি করব যা এই ইন্টারফেসটিকে বাস্তব রোবট লিবের বিরুদ্ধে প্রয়োগ করে।

আমি যে কমান্ডগুলি ফলস্বরূপ লিখব তা বেস ক্লাসটি প্রসারিত করবে না, পরিবর্তে আপনি যে ইন্টারফেসটি প্রবর্তন করেছিলেন তা চালিয়ে যাবে।

এইভাবে আপনি রোবটকন্ট্রোলকে বিদ্রূপ করতে পারেন, কোনও আদেশকে মকটি পাস করতে পারেন এবং এটি ইন্টারফেসে সঠিক পদ্ধতি বলে কিনা তা যাচাই করতে পারেন।

প্রোডগুলিতে আপনি রোবটকন্ট্রোলের আসল ইমপ্লিটগুলি যে কমান্ডগুলি প্রয়োগ করেছিলেন তা পাস করবে।

আমি নিশ্চিত না যে এটিই আপনি মনে রেখেছিলেন এবং বোঝা ভারী বলে মনে করেন?

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


2
+1 টি। ইন্টারফেস পছন্দ করবেন না? নিজে কর.
নীল

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

0

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

এটির জন্য আপনার কোডের একটি পৃথক "ইউনিট পরীক্ষা বিল্ড" দরকার।

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

তারপরে আপনার কাছে কমান্ড রয়েছে যা আপনি নিজের পরীক্ষার কাঠামোতে ফেলে দিতে পারেন যা রোবোট গ্রন্থাগারটি একই পদ্ধতিগুলি গ্রহণ করে।

এটি কিছুটা স্ট্যাবিং এবং বিদ্রূপের সাথে জড়িত থাকবে তবে এটি কোনও ইউনিট পরীক্ষার ডিজাইনে অনিবার্য।

বেস শ্রেণীর নাম পরিবর্তন করা যেতে পারে একটি # নির্দিষ্ট বা সম্ভবত পছন্দসই, একটি টাইপডেফ দিয়ে।

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