(এটি অনুশীলনী রেল থেকে একটি সংক্ষিপ্ত উদ্ধৃতি। প্রথম অধ্যায় বিনামূল্যে পেতে এখানে সাইন আপ করুন!)
সুতরাং, আপনি একটি নতুন অ্যাপে কাজ করছেন, এবং রেল আপনার জন্য একটি পরীক্ষা তৈরি করেছে:
require 'test_helper'
class BugTest < ActiveSupport::TestCase
# test "the truth" do
# assert true
# end
end
আপনি এটিকে মন্তব্য করেন, একটি নাম নিয়ে আসেন এবং আপনি আপনার পরীক্ষা লিখতে প্রস্তুত, তাই না? কিন্তু তারপর কি? আপনি প্রথমে কি লিখবেন? আপনার পরীক্ষার কোড কেমন হওয়া উচিত?
আপনি যদি একটি সাধারণ প্যাটার্ন অনুসরণ করেন, তাহলে আপনি কোডের সেই স্টাব আউট লাইনগুলিকে পরিষ্কার, সুগঠিত পরীক্ষার ক্ষেত্রে পরিণত করবেন৷
তিন-ফেজ পরীক্ষার প্যাটার্ন
আপনার পরীক্ষার ক্ষেত্রে তিনটি ধাপে কাজ করা উচিত:
- প্রথমে, আপনি কিছু জিনিস সেট আপ করুন ("সাজানো")
- তারপর, আপনি কিছু করুন ("অ্যাক্ট")
- তারপর, আপনি নিশ্চিত করুন যে আপনি যা ঘটতে আশা করেছিলেন, বাস্তবে ঘটেছে। ("আসার্ট")
উদাহরণস্বরূপ, কল্পনা করুন যে আপনি রুবিতে একটি অ্যারেতে একটি পদ্ধতি পরীক্ষা করছেন। এই প্যাটার্ন অনুসরণ করে, আপনার পরীক্ষা এর মত দেখতে পারে:
test "Array#sort will sort an array of numbers" do
# arrange
unsorted_array = [7, 4, 2, 3]
# act
sorted_array = unsorted_array.sort
# assert
assert_equal [2, 3, 4, 7], sorted_array
end
যথেষ্ট সহজ. কিন্তু পরীক্ষার প্রতিটি অংশে যাওয়ার জায়গা আছে, এবং পরীক্ষার প্রতিটি পর্যায় প্রায় আপনাকে বলে দেয় কিভাবে এটি লিখতে হয়।
কখনও কখনও, আপনার একটি ব্যবস্থা পর্বের প্রয়োজন হবে না, বা আইন এবং দাবী পর্যায়গুলি একত্রিত হবে। কিন্তু আপনি যখন আপনার পরীক্ষা লিখবেন তখনও এটি তিনটি পর্যায় সম্পর্কে চিন্তা করতে সাহায্য করে।
দ্য অ্যাসার্ট ফেজ গোটচা
অ্যাসার্ট পর্বে একটি কৌশল রয়েছে:অ্যাক্ট ফেজ অ্যাসার্ট পর্বে যে যুক্তি ব্যবহার করেছে আপনার সেই একই যুক্তি ব্যবহার করা উচিত নয়। আপনি সবসময় একই উত্তর দুটি পাথ নিতে হবে. অন্যথায়, আপনি যে কোডটি কল করছেন তাতে আপনি বাগগুলি লক্ষ্য করবেন না, কারণ এটি কেবলমাত্র অ্যাসার্ট পর্বে আবার কল করা হচ্ছে।
উদাহরণস্বরূপ, আপনি যদি কিছু গণিত করছেন:
test "average returns the average of a set of numbers" do
# arrange
numbers = [1, 2, 3, 4]
# act
average = numbers.average
# assert
# this is bad
assert_equal [1, 2, 3, 4].average, average
# this is better
assert_equal 2.5, average
end
[1, 2, 3, 4].average
কল করা হচ্ছে আবার অ্যাসার্ট পর্বে খারাপ, কারণ average
প্রায় কিছুই ফেরত দিতে পারে এবং সেই দাবী এখনও পাস হবে।
এখানে, এটি বেশ পরিষ্কার। কিন্তু জিনিসগুলি আরও জটিল হয়ে গেলেও, নিশ্চিত করুন যে আপনি একই কোড দুবার চালাচ্ছেন না। অন্যথায় আপনি শুধুমাত্র যাচাই করছেন যে আপনার পদ্ধতিটি কল করা হয়েছে , এমন নয় যে এটি আপনার প্রত্যাশা অনুযায়ী কাজ করেছে৷
সাধারণত, উত্তরের দ্বিতীয় পথ নেওয়ার সবচেয়ে সহজ উপায় হল উত্তরটি হাতে খুঁজে বের করা এবং এটিকে হার্ডকোড করা। এটি ভঙ্গুর হতে পারে, কিন্তু আপনি এটি বুঝতে না পেরে আপনার পরীক্ষাগুলি ভেঙে ফেলার চেয়ে এটি ভাল৷
তিনটি পর্যায় কেন?
আপনি যদি আপনার পরীক্ষাগুলিকে এই তিনটি পর্যায়ে বিভক্ত করেন তবে উত্তর দেওয়ার জন্য আপনার কাছে আরও সহজ প্রশ্ন রয়েছে। "আমি এই পরীক্ষাটি কীভাবে লিখব?" এর পরিবর্তে, আপনি প্রতিটি পর্যায়ে ফোকাস করতে পারেন:"আমি কীভাবে এই পরীক্ষাটি সেট আপ করব?", "আমি কী পরীক্ষা করছি?", "উত্তরটি কেমন হওয়া উচিত?"
এই প্রশ্নগুলির এখনও সহজ উত্তর নাও থাকতে পারে, তবে উত্তরগুলি একবারে পুরো পরীক্ষা সম্পর্কে চিন্তা করার চেয়ে অনেক সহজ হবে। এবং যদি আপনি ভাগ্যবান হন, আপনি এমনকি সম্পর্কিত পরীক্ষার মধ্যে পর্যায়গুলি ভাগ করে নিতে পারেন, আপনার পরবর্তী পরীক্ষাটি লিখতে অনেক কম বেদনাদায়ক করে তোলে৷