RSpec এ Shared Resources ব্যবহার করা হয় যখন একাধিক টেস্টে একই ধরনের ডেটা বা অবজেক্ট বারবার ব্যবহার করতে হয়। এটি কোডকে পুনঃব্যবহারযোগ্য এবং সংগঠিত করে তোলে, এবং টেস্টিংকে আরও সহজ এবং দ্রুত করে তোলে। RSpec এ shared examples এবং shared contexts দুটি মূল উপায় রয়েছে যা আপনি complex test cases এর জন্য shared resources তৈরি করতে ব্যবহার করতে পারেন।
১. Shared Examples (শেয়ারড এক্সাম্পল)
Shared Examples ব্যবহৃত হয় যখন একই ধরনের টেস্ট একাধিক স্থানে পুনরায় ব্যবহার করতে হয়। এটি কোডের পুনঃব্যবহারযোগ্যতা এবং কার্যকারিতা বাড়াতে সাহায্য করে।
উদাহরণ:
ধরা যাক, আমাদের একটি অ্যাপ্লিকেশন রয়েছে যা ব্যবহারকারীর নাম যাচাই করে, এবং আমাদের এই টেস্টটি বিভিন্ন ক্ষেত্রে পুনরায় ব্যবহার করতে হবে।
# shared_examples.rb
RSpec.shared_examples "একটি বৈধ ব্যবহারকারীর নাম" do
it "ব্যবহারকারীর নাম অবশ্যই ৩ টি অক্ষরের বেশি হতে হবে" do
expect(user.name.length).to be > 3
end
it "ব্যবহারকারীর নাম সঠিকভাবে ফর্ম্যাট করা উচিত" do
expect(user.name).to match(/[A-Za-z]+/)
end
endএখন, এই শেয়ারড এক্সাম্পলটি আমরা বিভিন্ন টেস্টে ব্যবহার করতে পারি:
describe "ব্যবহারকারী A" do
let(:user) { User.new(name: "Alice") }
it_behaves_like "একটি বৈধ ব্যবহারকারীর নাম"
end
describe "ব্যবহারকারী B" do
let(:user) { User.new(name: "Bob") }
it_behaves_like "একটি বৈধ ব্যবহারকারীর নাম"
endএখানে, it_behaves_like ব্যবহার করে আমরা একই টেস্ট কোডকে বিভিন্ন বর্ণনায় ব্যবহার করেছি, যাতে একই আচরণ যাচাই করা যায়।
২. Shared Context (শেয়ারড কনটেক্সট)
Shared Context ব্যবহৃত হয় একাধিক টেস্টের জন্য একটি সাধারণ কনটেক্সট বা প্রস্তুতি ভাগ করতে। এটি ডাটাবেস সেটআপ, ফাইল ডাউনলোড, বা অন্যান্য প্রস্তুতিমূলক কাজের জন্য ব্যবহার করা হয়।
উদাহরণ:
ধরা যাক, আমাদের একটি কনটেক্সট রয়েছে যা কিছু ডেটাবেস বা অবজেক্ট প্রস্তুত করে যা একাধিক টেস্টে ব্যবহার করতে হবে।
# shared_contexts.rb
RSpec.shared_context "প্রাথমিক ডেটাবেস প্রস্তুতি" do
before do
@user = User.create(name: "Alice", email: "alice@example.com")
@product = Product.create(name: "Laptop", price: 1000)
end
endএখন, এই shared context-টি আমরা বিভিন্ন টেস্টে ব্যবহার করতে পারি:
describe "ব্যবহারকারী এবং পণ্য" do
include_context "প্রাথমিক ডেটাবেস প্রস্তুতি"
it "ব্যবহারকারী সঠিকভাবে নিবন্ধিত হয়েছে" do
expect(@user).to be_valid
end
it "পণ্য সঠিকভাবে যোগ করা হয়েছে" do
expect(@product).to be_valid
end
endএখানে, include_context ব্যবহার করে আমরা shared context কে বিভিন্ন টেস্টে যুক্ত করেছি, যার মাধ্যমে আমাদের ডেটাবেস বা প্রস্তুতির তথ্য শেয়ার করা হয়েছে।
Shared Resources এর সুবিধা
- কোড পুনঃব্যবহারযোগ্যতা: Shared Examples এবং Shared Context ব্যবহারের মাধ্যমে একই কোড বারবার না লিখে পুনরায় ব্যবহার করা যায়।
- সংগঠিত টেস্টিং: একাধিক টেস্টের জন্য এক ধরনের শেয়ারড রিসোর্স ব্যবহার করা টেস্টকে আরও সংগঠিত এবং পরিষ্কার করে তোলে।
- টেস্টের গতি বৃদ্ধি: shared resources ব্যবহার করার ফলে প্রতিটি টেস্টে একাধিকবার সেটআপ বা ডেটাবেস কাজ পুনরাবৃত্তি করতে হয় না, যা টেস্টিংয়ের গতি বৃদ্ধি করে।
- সহজ রক্ষণাবেক্ষণ: টেস্টের জন্য একাধিক রিসোর্স পরিবর্তন করতে হলে কেবল এক জায়গায় পরিবর্তন করা যায়, যা টেস্ট কোডের রক্ষণাবেক্ষণ সহজ করে তোলে।
সারাংশ
RSpec এ Shared Resources ব্যবহার করা হয় complex test cases এর জন্য পুনরায় ব্যবহৃত ডেটা বা অবজেক্টগুলোকে একত্রিত করতে। এটি shared examples এবং shared contexts ব্যবহারের মাধ্যমে টেস্টের কোড পুনঃব্যবহারযোগ্য, সংগঠিত এবং দ্রুত করতে সাহায্য করে। BDD এর এই পদ্ধতিটি সফটওয়্যার ডেভেলপমেন্টের টেস্টিং প্রক্রিয়া আরও সহজ, দ্রুত এবং কার্যকর করে তোলে।
Read more