এটি কি কোনও এপিআই ক্লায়েন্টের ইউনিট-টেস্টিংয়ের পক্ষে মূল্যবান?


38

এটি এমন কিছু যা এখন কিছুক্ষণের জন্য আমাকে বিরক্ত করছে। এটি কি কোনও এপিআই ক্লায়েন্টের ইউনিট-টেস্টিংয়ের পক্ষে মূল্যবান?

ধরা যাক আপনি একটি ছোট্ট বর্গ তৈরি করছেন যা একটি পোষ্যপাল্ট REST এপিআইতে কল বিমূর্ত করার জন্য। পোড়শপটি একটি খুব সাধারণ এপিআই এবং এটির একটি মৌলিক পদ্ধতির সেট রয়েছে:

  • listProducts()
  • getProductDetails(ProductID)
  • addProduct(...)
  • removeProduct(ProductID)

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

আমি নিশ্চিত যে আমি কিছু মিস করছি, বা কাঠির ভুল প্রান্ত পেয়েছি, বা গাছের জন্য কাঠ দেখছি না। কেউ কি আমাকে সঠিক ট্র্যাকে দাঁড়াতে পারবেন?


1
যদি এটি মৌলিক পদ্ধতিগুলির সাথে এত সহজ এপিআই না হয় তবে আপনি কি অন্যরকম বোধ করবেন? এমনকি একটি শেড তুষার পর্যন্ত দাঁড়িয়ে আছে।
জেফো

উত্তর:


31

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

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

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


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

1
আপনি পরীক্ষা করতে পারেন যে কোনও add()পদ্ধতিতে দুটি সংখ্যা সঠিকভাবে যুক্ত হয় তবে এর অর্থ এই নয় যে অ্যালগরিদমের এই সময়ে যুক্ত করা সঠিক জিনিস - add()আপনার প্রোগ্রামটি ভুল হলেও ইউনিট পরীক্ষা সফল হবে। যদি হয় ভুল জিনিস, তারপর আপনার levenshteinDistance()পদ্ধতি দায়ী নয়, add()পদ্ধতি। এটা ঠিক একই। কোডগুলি পদ্ধতিগুলিতে পৃথক করার বিষয়টি সর্বদা এটির যে প্রতিটি পদ্ধতিতে কেবল একটি জিনিস সঠিক হওয়ার বিষয়ে যত্ন নেওয়া উচিত ।
কিলিয়ান ফট

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

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

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

9

সংক্ষিপ্ত উত্তর:

সমস্ত পদ্ধতি ইউনিট-পরীক্ষা করা উচিত।

দীর্ঘ উত্তর:

হ্যাঁ। এটা মূল্য।

এইগুলি এপিআই-কলিং পদ্ধতিতে এমন কিছু বিষয়গুলির ইউনিট পরীক্ষার পরীক্ষা করা উচিত:

  • যে আপনি API কলগুলিতে সুসংহত বা সঠিক পরামিতিগুলি পার করছেন।
  • যে আপনি APIs (উপহাস করেছেন বা না করেছেন) দ্বারা ফিরিয়ে দেওয়া নির্দিষ্ট ধরণের ডেটা অনুসারে প্রতিক্রিয়া ব্যক্ত করছেন, উদাহরণস্বরূপ, সম্ভবত যখন এপিআই কোনও খালি স্ট্রিং ফিরিয়ে দেয় তখন আপনার পদ্ধতির একটি ডিফল্ট মান ফিরে আসবে (কেবলমাত্র একটি উদাহরণ)
  • যখন API কলগুলি ত্রুটি উত্পন্ন করে তখন কলার পদ্ধতিগুলি সঠিকভাবে আচরণ করে

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


আপনি "বিদ্রূপ করেছেন বা না" বলেছেন ... তাই আসল এপিআইয়ের বিরুদ্ধে পরীক্ষা করা কি ঠিক আছে? ইউনিট টেস্টের মতো দেখতেও কি আমি এটি একটি সংহতকরণ পরীক্ষা বলতে পারি? নাকি এটাকে ডাকার মতো আরও কিছু আছে? আমি পরীক্ষা করতে চাই যে আমার এপিআই র‌্যাপার যা কিছু বলে, যা করে তা করে ...
ড্যান রোজনস্টার্ক

1
@ ড্যানরোসেনস্টার্ক আমি অনুমান করি যে ক্ষেত্রে এপিআই পরিষেবাটি উপহাস করা হচ্ছে না, এটি একটি ইন্টিগ্রেশন পরীক্ষা।
তুলসিন কর্ডোভা

আপনি যদি 5 সেকেন্ডের মধ্যে জানতে পারবেন যে আপনি যখন API এ আসল কল করবেন তখন আপনি সঠিকভাবে ডেটা ফিরিয়ে আনছেন? যেহেতু এপিআই মক্সগুলি সত্যিকারের কলগুলি কেবলমাত্র ব্যর্থ হবে তা যদি তারা এপিআই পরিবর্তন করে ... তবে সেই ক্ষেত্রে আপনার মক পরীক্ষাগুলি পাস হতে পারে তবে আসল কলগুলি ব্যর্থ হবে। অর্থহীন বলে মনে হচ্ছে
ম্যাট

5

এগুলি ইউনিট পরীক্ষা হবে না কারণ আপনি নিজের সিস্টেমের ইনপুট এবং আউটপুট পরীক্ষা করছেন, আরও সীমিত ইন্টিগ্রেশন পরীক্ষার মতো।

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

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

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