এখানে দুটি বিষয় আমাদের দেখতে হবে।
প্রথমটি হ'ল আপনি ইউনিট পরীক্ষার দৃষ্টিকোণ থেকে আপনার সমস্ত পরীক্ষার দিকে তাকিয়ে আছেন বলে মনে হচ্ছে। ইউনিট পরীক্ষাগুলি অত্যন্ত মূল্যবান, তবে একমাত্র ধরণের পরীক্ষা নয়। টেস্টগুলি আসলে খুব দ্রুত ইউনিট পরীক্ষা থেকে কম দ্রুত ইন্টিগ্রেশন টেস্ট এমনকি ধীর স্বীকৃতি পরীক্ষাগুলি পর্যন্ত কয়েকটি বিভিন্ন স্তরে বিভক্ত হতে পারে । ( কার্যক্ষম পরীক্ষার মতো আরও অনেক স্তর বিচ্ছিন্ন হতে পারে ))
দ্বিতীয়টি হ'ল আপনি তৃতীয় পক্ষের কোডগুলিতে আপনার ব্যবসায়িক যুক্তির সাথে মিশ্রিত করছেন, পরীক্ষার চ্যালেঞ্জ তৈরি করছেন এবং সম্ভবত আপনার কোডটিকে আরও ভঙ্গুর করে তুলছেন।
ইউনিট পরীক্ষা দ্রুত হওয়া উচিত এবং প্রায়শই চালানো উচিত। উপহাস নির্ভরতা এই পরীক্ষাগুলি দ্রুত চালিয়ে যেতে সহায়তা করে, তবে নির্ভরতা পরিবর্তিত হয় এবং মক না ঘটলে সম্ভাব্যভাবে কভারেজের গর্তগুলি প্রবর্তন করতে পারে। আপনার পরীক্ষাগুলি সবুজ চলাকালীন আপনার কোডটি নষ্ট হতে পারে। নির্ভরযোগ্যতার ইন্টারফেস পরিবর্তিত হলে কিছু বিদ্রূপযুক্ত গ্রন্থাগারগুলি আপনাকে সতর্ক করবে others
অন্যদিকে ইন্টিগ্রেশন টেস্টগুলি তৃতীয় পক্ষের লাইব্রেরি সহ উপাদানগুলির মধ্যে ইন্টারঅ্যাকশন পরীক্ষা করার জন্য ডিজাইন করা হয়েছে। মকগুলি এই পরীক্ষার পর্যায়ে ব্যবহার করা উচিত নয় কারণ আমরা দেখতে চাই যে প্রকৃত বস্তু কীভাবে একসাথে ইন্টারঅ্যাক্ট করে। যেহেতু আমরা আসল অবজেক্ট ব্যবহার করছি, এই পরীক্ষাগুলি ধীর হবে এবং আমরা আমাদের ইউনিট পরীক্ষাগুলির প্রায়শই প্রায়শই চালাব না।
স্বীকৃতি পরীক্ষাগুলি আরও উচ্চতর স্তরের দিকে তাকাচ্ছে, যা সফ্টওয়্যারটির প্রয়োজনীয়তা পূরণ করে testing এই পরীক্ষাগুলি পুরো, সম্পূর্ণ সিস্টেমের বিরুদ্ধে চালিত হয় যা মোতায়েন হবে। আবারও, কোনও উপহাস ব্যবহার করা উচিত নয়।
লোকগুলি মোকদ্দমার বিষয়ে মূল্যবান একটি নির্দেশিকা খুঁজে পেয়েছে তা হ'ল আপনার নিজস্ব নয় এমন মক প্রকারগুলি নয় । অ্যামাজন এসআই-তে এপিআইয়ের মালিকানাধীন যাতে তারা নিশ্চিত করতে পারে যে এটি তাদের নীচে পরিবর্তিত হয় না। অন্যদিকে, আপনার এই আশ্বাসগুলি নেই। অতএব, আপনি যদি নিজের পরীক্ষাগুলিতে এস 3 এপিআইকে উপহাস করেন তবে এটি আপনার কোডটি পরিবর্তন এবং ভেঙে দিতে পারে, যখন আপনার পরীক্ষাগুলি সবুজ দেখায়। তাহলে আমরা কীভাবে তৃতীয় পক্ষের লাইব্রেরি ব্যবহার করে এমন পরীক্ষার কোডটি ইউনিট করব?
ভাল, আমরা না। আমরা যদি গাইডলাইনটি অনুসরণ করি তবে আমরা নিজের মালিকানাযুক্ত জিনিসগুলিকে উপহাস করতে পারি না। তবে ... আমরা যদি আমাদের প্রত্যক্ষ নির্ভরশীলতার মালিক হয়ে থাকি তবে আমরা সেগুলি উপহাস করতে পারি। কিন্তু কিভাবে? আমরা এস 3 এপিআইয়ের জন্য আমাদের নিজস্ব মোড়ক তৈরি করি। আমরা এটিকে অনেকগুলি এস 3 এপিআইয়ের মতো দেখতে তৈরি করতে পারি, বা আমরা এটি আমাদের চাহিদা আরও নিবিড়ভাবে ফিট করতে পারি (পছন্দসই)। আমরা এটিকে আরও কিছুটা বিমূর্ত করতে পারি, PersistenceServiceবরং একটি বলুন AmazonS3Bucket। PersistenceServiceমত পদ্ধতি সঙ্গে একটি ইন্টারফেস হবে #save(Thing)এবং #fetch(ThingId), পদ্ধতি ধরনের আমরা দেখতে দেখতে পারেন (এই উদাহরণ আছে, আপনি আসলে বিভিন্ন পদ্ধতি চাইতে পারেন)। আমরা এখন PersistenceServiceএস S3PersistenceServiceকলিং কোড থেকে দূরে সজ্জিত করে এস 3 এপিআই (একটি বলুন ) এর আশেপাশে একটি বাস্তবায়ন করতে পারি ।
এখন কোডটি যা এস 3 এপিআই কল করে। আমাদের সেই কলগুলিকে কোনও PersistenceServiceবস্তুর কল সহ প্রতিস্থাপন করতে হবে । আমরা আমাদের অবজেক্টে প্রবেশের জন্য নির্ভরতা ইনজেকশন ব্যবহার করি PersistenceService। এটির জন্য জিজ্ঞাসা করা নয়S3PersistenceService , তবে একটি জিজ্ঞাসা করা গুরুত্বপূর্ণ PersistenceService। এটি আমাদের আমাদের পরীক্ষার সময় বাস্তবায়নটি সরিয়ে নিতে সহায়তা করে।
সরাসরি এস 3 এপিআই ব্যবহার করার জন্য ব্যবহৃত সমস্ত কোড এখন আমাদের ব্যবহার করে PersistenceServiceএবং আমাদের S3PersistenceServiceএখন এস 3 এপিআইতে সমস্ত কল করে। আমাদের পরীক্ষায় আমরা PersistenceServiceযেহেতু এটির মালিক সেহেতু আমরা উপহাস করতে পারি এবং আমাদের কোডটি সঠিক কলগুলি নিশ্চিত করে তা নিশ্চিত করতে মকটি ব্যবহার করে। কিন্তু এখন এটি পরীক্ষা করে কীভাবে ছেড়ে যায় S3PersistenceService। এটি আগের মতো একই সমস্যা: আমরা বাহ্যিক পরিষেবাতে কল না করে এটি পরীক্ষা করতে পারি না। সুতরাং ... আমরা এটি ইউনিট পরীক্ষা না। আমরা পারে এস 3 এপিআই নির্ভরতা খুঁজে উপহাস, কিন্তু এই আমাদের সামান্য টু কোন অতিরিক্ত আস্থা দিতে হবে। পরিবর্তে, আমাদের এটি একটি উচ্চ স্তরের: ইন্টিগ্রেশন টেস্টে পরীক্ষা করতে হবে।
এটি কিছুটা ঝামেলার মতো বলতে পারে যে আমাদের কোডের একটি অংশ পরীক্ষা করা উচিত নয়, তবে আমরা কী অর্জন করেছি তা দেখি। আমরা পুরো জায়গা জুড়ে কোডের একগুচ্ছ ছিলাম আমরা ইউনিট পরীক্ষা করতে পারিনি যে এখন মাধ্যমে ইউনিট পরীক্ষা করা যেতে পারে PersistenceService। আমাদের তৃতীয় পক্ষের লাইব্রেরি জঞ্জালটি একটি একক বাস্তবায়ন শ্রেণীর মধ্যে সীমাবদ্ধ। এই শ্রেণীর API টি ব্যবহার করতে প্রয়োজনীয় কার্যকারিতা সরবরাহ করা উচিত তবে এর সাথে কোনও বাহ্যিক ব্যবসার যুক্তি সংযুক্ত নেই। সুতরাং, একবার এটি লেখা হয়ে গেলে এটি খুব স্থিতিশীল হওয়া উচিত এবং খুব বেশি পরিবর্তন হওয়া উচিত নয়। কোডটি স্থিতিশীল হওয়ার কারণে আমরা ধীর গতির টেস্টগুলির উপর নির্ভর করতে পারি।
পরবর্তী ধাপের জন্য ইন্টিগ্রেশন পরীক্ষার লিখতে হয় S3PersistenceService। এগুলিকে নাম বা ফোল্ডারে আলাদা করা উচিত যাতে আমরা এগুলি আমাদের দ্রুত ইউনিট পরীক্ষার থেকে আলাদাভাবে চালাতে পারি। ইন্টিগ্রেশন টেস্টগুলি প্রায়শই ইউনিট পরীক্ষার মতো একই টেস্টিং ফ্রেমওয়ার্কগুলিকে ব্যবহার করতে পারে যদি কোডটি পর্যাপ্ত তথ্যযুক্ত হয়, তাই আমাদের কোনও নতুন সরঞ্জাম শেখার দরকার নেই। ইন্টিগ্রেশন পরীক্ষার আসল কোডটি হ'ল আপনি নিজের বিকল্প 1 এর জন্য যা লিখবেন।