TL; ড
পিভোটালে আমরা সিডারটি লিখেছিলাম কারণ আমরা আমাদের রুবি প্রকল্পগুলিতে আরএসপিকে ব্যবহার করি এবং তাদের পছন্দ করি। সিডার ওসিউনিট প্রতিস্থাপন বা প্রতিযোগিতা বোঝাতে নয়; এটি বিডিডি-শৈলীর পরীক্ষার সম্ভাব্যতাটিকে উদ্দেশ্য সিতে নিয়ে আসা বোঝাতে চেয়েছিল, ঠিক যেমন রাস্পেক রুবিতে বিডিডি-শৈলীর পরীক্ষার পথিকৃত করেছিলেন, কিন্তু টেস্ট :: ইউনিটকে সরিয়ে দেয়নি। এক বা অন্যটি বেছে নেওয়া মূলত শৈলীর পছন্দের বিষয়।
কিছু ক্ষেত্রে ওসিউনিট আমাদের জন্য যেভাবে কাজ করে তাতে কিছু ত্রুটিগুলি কাটিয়ে উঠতে আমরা সিডার ডিজাইন করেছি। বিশেষত, আমরা পরীক্ষাগুলিতে ডিবাগারটি ব্যবহার করতে, কমান্ড লাইন থেকে এবং সিআই বিল্ডগুলিতে পরীক্ষা চালাতে এবং পরীক্ষার ফলাফলের দরকারী পাঠ্য আউটপুট পেতে সক্ষম হতে চেয়েছিলাম। এই জিনিসগুলি আপনার জন্য কমবেশি দরকারী হতে পারে।
দীর্ঘ উত্তর
সিডার এবং ওসিউনিট (উদাহরণস্বরূপ) হিসাবে দুটি পরীক্ষামূলক কাঠামোর মধ্যে সিদ্ধান্ত নেওয়ার ক্ষেত্রে দুটি জিনিস নেমে আসে: পছন্দসই শৈলী এবং ব্যবহারের সহজলভ্যতা। আমি স্টাইল দিয়ে শুরু করব, কারণ এটি কেবল মতামত এবং পছন্দের বিষয়; ব্যবহারের সহজলভ্যতা বাণিজ্যগুলির একটি সেট হতে পারে।
স্টাইল বিবেচনাগুলি আপনি কোন প্রযুক্তি বা ভাষা ব্যবহার করেন তা ছাড়িয়ে যায়। এক্স ইউনাইট-স্টাইল ইউনিট টেস্টিং বিডিডি-স্টাইল পরীক্ষার চেয়ে অনেক বেশি সময় ধরে ছিল, তবে আধুনিকীকরণটি বেশিরভাগ ক্ষেত্রেই জনপ্রিয়তা অর্জন করেছে, মূলত আরএসপেকের কারণে।
এক্স ইউনাইট-স্টাইল পরীক্ষার প্রাথমিক সুবিধা হ'ল এর সরলতা এবং বিস্তৃত গ্রহণ (বিকাশকারীদের মধ্যে যারা ইউনিট পরীক্ষা লেখেন); কোড লেখার জন্য আপনি যে কোনও ভাষা বিবেচনা করতে পারেন তার একটি xUnit- স্টাইলের কাঠামো উপলব্ধ।
এক্স ইউনাইট-স্টাইলের সাথে তুলনা করার সময় বিডিডি-স্টাইলের ফ্রেমওয়ার্কগুলিতে দুটি প্রধান পার্থক্য থাকে: আপনি কীভাবে পরীক্ষাটি কাঠামো (বা চশমা) গঠন করেন এবং আপনার বক্তব্য লেখার জন্য সিনট্যাক্স। আমার জন্য, কাঠামোগত পার্থক্য হ'ল মূল ডিফারিয়েটার। xUnit পরীক্ষাগুলি একটি প্রদত্ত পরীক্ষার শ্রেণিতে সমস্ত পরীক্ষার জন্য একটি সেটআপ পদ্ধতি সহ এক-মাত্রিক। আমরা যে ক্লাসগুলি পরীক্ষা করি সেগুলি এক-মাত্রিক নয়; আমাদের প্রায়শই বিভিন্ন, সম্ভাব্য বিরোধমূলক, প্রসঙ্গে ক্রিয়ার পরীক্ষা করা দরকার। উদাহরণস্বরূপ, একটি অ্যাড আইটেম: পদ্ধতি সহ একটি সাধারণ শপিংকার্ট শ্রেণি বিবেচনা করুন (এই উত্তরের উদ্দেশ্যে আমি উদ্দেশ্য সি সিনট্যাক্স ব্যবহার করব)। কার্টটি অন্য আইটেমগুলি রাখে তার তুলনায় কার্টটি খালি থাকলে এই পদ্ধতির আচরণের পার্থক্য থাকতে পারে; ব্যবহারকারী আলাদা ছাড় কোড প্রবেশ করিয়ে দিলে এটি পৃথক হতে পারে; এটি পৃথক হতে পারে যদি নির্দিষ্ট আইটেম 'পারে টি নির্বাচিত শিপিং পদ্ধতি দ্বারা চালিত করা হবে না; ইত্যাদি। এই সম্ভাব্য শর্তগুলি একে অপরের সাথে ছেদ করলে আপনি জ্যামিতিকভাবে সম্ভাব্য প্রসংগের সংখ্যা বাড়িয়ে তুলতে পারেন; এক্স ইউনাইট-স্টাইল পরীক্ষায় এটি প্রায়শই পরীক্ষার সাথে যুক্ত অনেকগুলি পদ্ধতির দিকে নিয়ে যায় যাডাড্ডিমেটহেনকার্টিআইটিসেম্পিটি এবং ননডিসকাউন্টকোড এবং শিপিংপথ মেথড অ্যাপ্লিকেশনস। বিডিডি-স্টাইলের কাঠামোর কাঠামো আপনাকে পৃথকভাবে এই শর্তগুলি সংগঠিত করতে সহায়তা করে, যা আমি মনে করি যে এটি সমস্ত ক্ষেত্রে আবশ্যক তা নিশ্চিত করা আরও সহজ করে তোলে, পাশাপাশি পৃথক শর্তগুলি সন্ধান, পরিবর্তন এবং যুক্ত করা আরও সহজ করে তোলে। উদাহরণস্বরূপ, সিডার সিনট্যাক্স ব্যবহার করে উপরের পদ্ধতিটি দেখতে এমন হবে: এক্স ইউনাইট-স্টাইল পরীক্ষায় এটি প্রায়শই পরীক্ষার সাথে যুক্ত অনেকগুলি পদ্ধতির দিকে নিয়ে যায় যাডাড্ডিমেটহেনকার্টিআইটিসেম্পিটি এবং ননডিসকাউন্টকোড এবং শিপিংপথ মেথড অ্যাপ্লিকেশনস। বিডিডি-স্টাইলের কাঠামোর কাঠামো আপনাকে পৃথকভাবে এই শর্তগুলি সংগঠিত করতে সহায়তা করে, যা আমি মনে করি যে এটি সমস্ত ক্ষেত্রে আবশ্যক তা নিশ্চিত করা আরও সহজ করে তোলে, পাশাপাশি পৃথক শর্তগুলি সন্ধান, পরিবর্তন এবং যুক্ত করা আরও সহজ করে তোলে। উদাহরণস্বরূপ, সিডার সিনট্যাক্স ব্যবহার করে উপরের পদ্ধতিটি দেখতে এমন হবে: এক্স ইউনাইট-স্টাইল পরীক্ষায় এটি প্রায়শই টেস্টএডআইডেমিথেনহেনকার্টসিসিপটিঅ্যান্ডনডিসকন্টকোডএন্ড শিপিংপথ মেথড অ্যাপ্লিকেশন এর মতো নামগুলির সাথে প্রচুর পদ্ধতির দিকে পরিচালিত করে। বিডিডি-স্টাইলের কাঠামোর কাঠামো আপনাকে পৃথকভাবে এই শর্তগুলি সংগঠিত করতে সহায়তা করে, যা আমি মনে করি যে এটি সমস্ত ক্ষেত্রে আবশ্যক তা নিশ্চিত করা আরও সহজ করে তোলে, পাশাপাশি পৃথক শর্তগুলি সন্ধান, পরিবর্তন এবং যুক্ত করা আরও সহজ করে তোলে। উদাহরণস্বরূপ, সিডার সিনট্যাক্স ব্যবহার করে উপরের পদ্ধতিটি দেখতে এমন হবে:
describe(@"ShoppingCart", ^{
describe(@"addItem:", ^{
describe(@"when the cart is empty", ^{
describe(@"with no discount code", ^{
describe(@"when the shipping method applies to the item", ^{
it(@"should add the item to the cart", ^{
...
});
it(@"should add the full price of the item to the overall price", ^{
...
});
});
describe(@"when the shipping method does not apply to the item", ^{
...
});
});
describe(@"with a discount code", ^{
...
});
});
describe(@"when the cart contains other items, ^{
...
});
});
});
কিছু ক্ষেত্রে আপনি অনুরূপগুলির একই সেট রয়েছে এমন প্রসঙ্গগুলি সন্ধান করতে পারবেন, যা আপনি ভাগ করে নেওয়া উদাহরণ প্রসঙ্গে ব্যবহার করতে পারেন।
বিডিডি-স্টাইলের ফ্রেমওয়ার্ক এবং এক্স ইউনাইট-স্টাইলের ফ্রেমওয়ার্কগুলির মধ্যে দ্বিতীয় মূল পার্থক্য, দৃser়তা (বা "ম্যাচার") সিনট্যাক্স, চশমাটির স্টাইলকে কিছুটা সুন্দর করে তোলে; কিছু লোক সত্যিই এটি পছন্দ করে, অন্যরা পছন্দ করে না।
এটি ব্যবহারের সহজতার প্রশ্নে বাড়ে। এই ক্ষেত্রে, প্রতিটি কাঠামোর তার উপকারিতা এবং মতামত রয়েছে:
ওসিউনিট সিডারের চেয়ে অনেক বেশি দীর্ঘ ছিল এবং সরাসরি এক্সকোডে সংহত হয়েছে। এর অর্থ এটি একটি নতুন পরীক্ষার টার্গেট করা সহজ, এবং বেশিরভাগ সময় পরীক্ষা নেওয়া এবং চলমান "ঠিক কাজ করে"। অন্যদিকে, আমরা দেখেছি যে কোনও কোনও ক্ষেত্রে যেমন কোনও আইওএস ডিভাইসে চালানো, ওসি ইউনাইট পরীক্ষার কাজ করা অসম্ভব অসম্ভব। সিডারের চশমাগুলি সেট করা ওসিইউনিত পরীক্ষার চেয়ে আরও কিছু কাজ লাগে, যেহেতু আপনি গ্রন্থাগারটি পেয়েছেন এবং নিজেই এর বিরুদ্ধে লিঙ্ক করেছেন (এক্সকোডে কখনই তুচ্ছ কাজ নয়)। আমরা সেটআপটিকে আরও সহজ করার জন্য কাজ করছি, এবং কোনও পরামর্শই স্বাগতের চেয়ে বেশি।
ওসিউনিট বিল্ডের অংশ হিসাবে পরীক্ষা চালায়। এর অর্থ আপনার পরীক্ষা চালানোর জন্য এক্সিকিউটেবল চালনার দরকার নেই; যদি কোনও পরীক্ষা ব্যর্থ হয় তবে আপনার বিল্ড ব্যর্থ হয়। এটি পরীক্ষা চালানোর প্রক্রিয়াটিকে এক ধাপ সহজ করে তোলে এবং পরীক্ষার আউটপুট সরাসরি আপনার বিল্ড আউটপুট উইন্ডোতে যায় যা এটি দেখতে সহজ করে তোলে। আমরা সিডার চশমাগুলিকে একটি নির্বাহযোগ্য হিসাবে তৈরি করতে বেছে নিয়েছি যা আপনি কয়েকটি কারণে পৃথকভাবে চালান:
- আমরা ডিবাগারটি ব্যবহার করতে সক্ষম হতে চাই। আপনি সিডার স্পেসগুলি চালান ঠিক তেমনভাবে আপনি অন্য কোনও এক্সিকিউটেবল চালাবেন, যাতে আপনি একইভাবে ডিবাগারটি ব্যবহার করতে পারেন।
- আমরা পরীক্ষাগুলিতে সহজ কনসোল লগিং চেয়েছিলাম। আপনি ওসিউনিট পরীক্ষায় এনএসএলগ () ব্যবহার করতে পারেন তবে আউটপুটটি বিল্ড উইন্ডোতে চলে যায় যেখানে এটি পড়তে আপনাকে বিল্ড স্টেপটি প্রকাশ করতে হবে।
- আমরা কমান্ড লাইনে এবং এক্সকোড উভয়ই পরীক্ষার প্রতিবেদন পড়তে সহজ চেয়েছিলাম। এক্সকোডের বিল্ড উইন্ডোতে ওসিউনিট ফলাফলগুলি দুর্দান্তভাবে উপস্থিত হয় তবে কমান্ড লাইন থেকে বিল্ডিং (বা সিআই প্রক্রিয়ার অংশ হিসাবে) ফলাফলগুলি প্রচুর এবং অন্যান্য বিল্ড আউটপুটটির সাথে মিলিত হয় inter পৃথক বিল্ড এবং রান পর্যায়ক্রমে সিডার আউটপুটকে পৃথক করে তাই পরীক্ষার আউটপুটটি খুঁজে পাওয়া সহজ। ডিফল্ট সিডার পরীক্ষার রানার প্রিন্টিংয়ের স্ট্যান্ডার্ড স্টাইলটি অনুলিপি করে। " প্রতিটি পাসিং স্পেসের জন্য, ব্যর্থ স্পেসগুলি ইত্যাদির জন্য "এফ" ইত্যাদি etc. সিডারও কাস্টম রিপোর্টার অবজেক্টগুলি ব্যবহার করার ক্ষমতা রাখে, যাতে আপনি কিছু চেষ্টা করে আউটপুট ফলাফলটি নিজের পছন্দ মতো দেখতে পারেন।
ওসিউনিট হ'ল অবজেক্টিভ সি এর অফিশিয়াল ইউনিট টেস্টিং ফ্রেমওয়ার্ক এবং এটি অ্যাপল সমর্থন করে। অ্যাপলের মূলত সীমাহীন সংস্থান রয়েছে, তাই তারা কিছু করতে চাইলে এটি হয়ে যায়। এবং সর্বোপরি, এটি আমরা যাচ্ছি অ্যাপলের স্যান্ডবক্স that এই মুদ্রার ফ্লিপ দিকটি অবশ্য অ্যাপলটি প্রতি দিন একটি ব্যাজিলিয়ান সমর্থন অনুরোধ এবং বাগ রিপোর্টের আদেশক্রমে গ্রহণ করে। এগুলি সবগুলি পরিচালনা করার ক্ষেত্রে তারা উল্লেখযোগ্যভাবে ভাল তবে তারা আপনার প্রতিবেদন করা সমস্যাগুলি অবিলম্বে বা একেবারে সামলাতে সক্ষম হতে পারে না। ওসিউনিতের তুলনায় সিডারটি অনেক নতুন এবং কম বেকড, তবে আপনার যদি প্রশ্ন বা সমস্যা বা পরামর্শ থাকে তবে সিডার মেইলিং তালিকায় একটি বার্তা প্রেরণ করুন (সিডার-discuss@googlegroups.com) এবং আমরা আপনাকে যা করতে সাহায্য করতে পারি তাই করব। এছাড়াও, গিথুব (github.com/pivotal/cedar) এর কাছ থেকে কোডটি কাঁটাচামচ করুন এবং আপনার যেটা মনে হচ্ছে তা যুক্ত করুন।
আইওএস ডিভাইসে ওসিউনিট পরীক্ষা চালানো কঠিন হতে পারে। সত্যি বলতে, আমি এটি বেশ কিছু সময়ের জন্য চেষ্টা করে দেখিনি, তাই এটি আরও সহজ হয়ে উঠতে পারে, তবে শেষবারের মতো চেষ্টা করার চেষ্টা করে আমি কোনও ইউআইকিট কার্যকারিতার জন্য ওসিউনিট পরীক্ষা নিতে পারি না। আমরা যখন সিডার লিখেছিলাম তখন আমরা নিশ্চিত করেছিলাম যে আমরা সিমুলেটর এবং ডিভাইসগুলিতে উভয়ই ইউআইকিট-নির্ভর কোডটি পরীক্ষা করতে পারি।
অবশেষে, আমরা ইউনিট পরীক্ষার জন্য সিডার লিখেছিলাম, যার অর্থ এটি ইউআইএসপেকের মতো প্রকল্পের সাথে তুলনাযোগ্য নয়। আমি ইউআইএসপেক ব্যবহার করার চেষ্টা করার পরে এটি বেশ কিছুক্ষণ হয়েছে, তবে আমি বুঝতে পেরেছিলাম যে এটি প্রাথমিকভাবে কোনও আইওএস ডিভাইসে ইউআই চালানোর জন্য প্রোগ্রামিকভাবে মনোনিবেশ করা উচিত। অ্যাপল (সেই সময়ে) ইউআইএআটোমেশন ঘোষণার কথা বলার পরে আমরা সিডারকে এই ধরণের চশমাটিকে সমর্থন না করার চেষ্টা করেছি।