আমি বিকাশ করা একটি API ক্লায়েন্ট লাইব্রেরি ইউনিট পরীক্ষা করার সর্বোত্তম উপায় বের করার চেষ্টা করে আমি চেনাশোনাগুলিতে ঘুরছি। লাইব্রেরিতে একটি Clientশ্রেণি রয়েছে যা মূলত এপিআই দিয়ে 1: 1 ম্যাপিং করে এবং একটি অতিরিক্ত Wrapperশ্রেণি যা শীর্ষের উপরে আরও বেশি ব্যবহারকারী-বান্ধব ইন্টারফেস সরবরাহ করে Client।
Wrapper --> Client --> External API
আমি প্রথমে উভয়ের বিরুদ্ধে প্রচুর পরীক্ষাগুলি লিখেছিলাম Clientএবং Wrapperকার্যকরভাবে পরীক্ষা করেছিলাম যে তারা যে কোনও অপারেট ( Wrapperঅপারেটিং Client, এবং Clientএইচটিটিপি সংযোগে পরিচালনা করে) যা কিছু উপযুক্ত কাজ করে তা এগিয়ে দেয় । তবে আমি এতে অস্বস্তি বোধ করতে শুরু করেছি, কারণ আমার মনে হচ্ছে আমি ইন্টারফেসের চেয়ে এই ক্লাসগুলির বাস্তবায়ন পরীক্ষা করছি। তত্ত্ব অনুসারে, আমি ক্লাসগুলি আরও একটি কার্যকর বৈধ বাস্তবায়নের জন্য পরিবর্তন করতে পারতাম, তবে আমার পরীক্ষাগুলি ব্যর্থ হবে কারণ আমি যে ফাংশনগুলি বলেছিলাম বলে ডাকা হচ্ছে না তাকে বলা হচ্ছে না। এটি আমার কাছে ভঙ্গুর পরীক্ষার মতো শোনাচ্ছে।
এর পরে, আমি ক্লাসগুলির ইন্টারফেস সম্পর্কে ভেবেছিলাম। পরীক্ষাগুলি যাচাই করা উচিত যে ক্লাসগুলি প্রকৃতপক্ষে তারা যেভাবে কাজ করে তা না করে বরং তারা যে কাজটি করতে চায় তা কাজ করে। তাহলে আমি কীভাবে এটি করতে পারি? প্রথম যে বিষয়টি মনে আসে তা হ'ল বাহ্যিক এপিআই অনুরোধগুলি স্তব্ধ করে দেওয়া। যাইহোক, আমি বাহ্যিক পরিষেবাটি আরও বেশি বোঝায় ভেবে নার্ভাস। আমি দেখেছি স্ট্যাবড এপিআইয়ের অনেকগুলি উদাহরণ কেবল ক্যানড প্রতিক্রিয়া জানায়, যা কেবল আপনার টেস্টটি আপনার নকল এপিআইয়ের বিরুদ্ধে সঠিকভাবে চালিত হয় তা পরীক্ষা করার জন্য খুব সহজ উপায় বলে মনে হয়। বিকল্পটি পরিষেবাটিকে মশকরা করা হচ্ছে, যা কেবলমাত্র অনিবার্য, এবং যখনই আসল পরিষেবা পরিবর্তিত হয় - এটি ওভারকিল এবং সময় অপচয় করার মতো মনে করে।
পরিশেষে, আমি প্রোগ্রামার এসই এর অন্য একটি উত্তর থেকে এটি পড়েছি :
রিমোট এপিআই ক্লায়েন্টের কাজটি নির্দিষ্ট কলগুলি ইস্যু করা - আর বেশি নয়, কমও নয়। অতএব, এটির পরীক্ষাটি যাচাই করা উচিত যে এটি calls কলগুলি ইস্যু করে - আর নেই, কম নয়।
এবং এখন আমি কম-বেশি নিশ্চিত - পরীক্ষার সময় Client, আমার যা যা পরীক্ষা করা দরকার তা হ'ল এটি API- র সঠিক অনুরোধগুলি করে (অবশ্যই, এপিআই পরিবর্তিত হওয়ার সম্ভাবনা সবসময়ই থাকে তবে আমার পরীক্ষাগুলি পাস হতে থাকে - তবে এটি যেখানে সংহতকরণ পরীক্ষা কার্যকর হবে)। যেহেতু Clientএপিআইয়ের সাথে কেবলমাত্র 1: 1 ম্যাপিং রয়েছে তাই এক বৈধ বাস্তবায়ন থেকে অন্যটিতে পরিবর্তনের বিষয়ে আমার উদ্বেগ সত্যিই প্রয়োগ হয় না - প্রতিটি পদ্ধতির জন্য কেবলমাত্র একটি বৈধ বাস্তবায়ন রয়েছে Client।
যাইহোক, আমি এখনও Wrapperক্লাসের সাথে আটকে আছি । আমি নিম্নলিখিত বিকল্পগুলি দেখতে পাচ্ছি:
আমি
Clientক্লাসটি বন্ধ করে দিয়েছি এবং কেবল পরীক্ষা করে দেখি যে উপযুক্ত পদ্ধতিগুলি বলা হয়। এইভাবে, আমি উপরের মতো একই জিনিস করছিClientতবে এপিআই-তে স্ট্যান্ড-ইন হিসাবে আচরণ করছি । আমি যেখানে শুরু করেছি সেখানে এটি আমাকে ঠিক পিছনে ফেলে দেয়। আবার, এটি আমাকে ইন্টারফেস নয়, পরীক্ষার বাস্তবায়নের অস্বস্তিকর অনুভূতি দেয়।Wrapperখুব ভাল একটি সম্পূর্ণ ভিন্ন ক্লায়েন্ট ব্যবহার বাস্তবায়িত করা যায়নি।আমি একটি মক তৈরি
Client। এখন এটি ঠিক করতে হবে যে এটি উপহাসের সাথে কতদূর যেতে হবে - পরিষেবাটির সম্পূর্ণ উপহাস তৈরি করতে প্রচুর পরিশ্রম লাগবে (লাইব্রেরিতে গিয়ে যত বেশি কাজ হয়েছে)। এপিআই নিজেই সহজ, তবে পরিষেবাটি বেশ জটিল (এটি মূলত সেই ডেটাতে অপারেশন সহ একটি ডেটাস্টোর)। এবং আবারও, আমাকে আমার উপহাসটি বাস্তবের সাথে সমন্বয় করতে হবেClient।আমি কেবল পরীক্ষা করেছি যে উপযুক্ত এইচটিটিপি অনুরোধ করা হচ্ছে। এর অর্থ এই যে এইচটিটিপি অনুরোধগুলি করার জন্য
Wrapperকোনও সত্যিকারেরClientঅবজেক্টের মাধ্যমে কল করা হবে , তাই আমি বাস্তবে এটি বিচ্ছিন্নভাবে পরীক্ষা করছি না। এটি কিছুটা ভয়ঙ্কর ইউনিট পরীক্ষা করে তোলে।
সুতরাং আমি এই সমাধানগুলির সাথে বিশেষভাবে সন্তুষ্ট নই। আপনি কি করতে চান? এটি সম্পর্কে কোন সঠিক উপায় আছে?