RSpec এ Hooks ব্যবহৃত হয় টেস্টের আগে এবং পরে কিছু কোড রান করার জন্য। এগুলি বিশেষভাবে resource cleanup বা প্রতিটি টেস্টের পর অব্যবহৃত রিসোর্স মুক্ত করার জন্য ব্যবহৃত হয়। এটি নিশ্চিত করে যে টেস্ট শেষে সিস্টেম বা ডাটাবেসে কোনও অপ্রয়োজনীয় অবস্থা বা রিসোর্স রয়ে যায় না, যা পরবর্তী টেস্টগুলির সঠিকতা বা কার্যকারিতাকে প্রভাবিত করতে পারে।
RSpec এ তিনটি প্রধান Hooks রয়েছে:
- before(:each)
- after(:each)
- before(:all)
- after(:all)
এই হুকগুলির সাহায্যে টেস্ট শুরু এবং শেষ হওয়ার আগে বা পরে নির্দিষ্ট কাজ সম্পাদন করা যায়, যেমন ডাটাবেস কানেকশন ক্লোজ করা, ফাইল ডিলিট করা, অথবা অন্য কোনো ক্লিনআপ কাজ করা।
Hooks এর ধরন ও ব্যবহার
1. before(:each)
এই হুকটি প্রতিটি টেস্টের আগে চলে, অর্থাৎ it ব্লকের শুরুতে চলে। এটি সাধারণত টেস্টের জন্য প্রয়োজনীয় রিসোর্স বা অবস্থা সেটআপ করার জন্য ব্যবহৃত হয়।
উদাহরণ:
describe "Calculator" do
before(:each) do
@calc = Calculator.new # প্রতি টেস্টের আগে Calculator অবজেক্ট তৈরি করা হবে
end
it "যোগফল সঠিকভাবে বের করে" do
expect(@calc.add(2, 3)).to eq(5)
end
it "বিয়োগফল সঠিকভাবে বের করে" do
expect(@calc.subtract(5, 3)).to eq(2)
end
endএখানে before(:each) হুকটি Calculator অবজেক্টটি প্রতি টেস্টের আগে তৈরি করছে।
2. after(:each)
এই হুকটি প্রতিটি টেস্টের পরে চলে, অর্থাৎ টেস্ট শেষ হওয়ার পর এটি রিসোর্স ফ্রি করার জন্য ব্যবহার করা হয়। এটি সাধারণত টেস্টের পর অব্যবহৃত রিসোর্স বা অবস্থা মুক্ত করার জন্য ব্যবহৃত হয়।
উদাহরণ:
describe "File handling" do
after(:each) do
File.delete("temp_file.txt") if File.exist?("temp_file.txt")
end
it "ফাইল তৈরি করে" do
File.write("temp_file.txt", "Temporary Data")
expect(File.exist?("temp_file.txt")).to be true
end
endএখানে after(:each) হুকটি প্রতি টেস্টের পর "temp_file.txt" ফাইলটি ডিলিট করবে।
3. before(:all)
এই হুকটি একবারে শুধুমাত্র পুরো describe ব্লকের জন্য একবারই চলে। এটি সাধারণত টেস্টের জন্য প্রস্তুতি নেওয়ার জন্য ব্যবহৃত হয়, যেমন ডাটাবেসে টেবিল তৈরি করা বা অন্য কোনো মক অবস্থা তৈরি করা।
উদাহরণ:
describe "Database connection" do
before(:all) do
@db = Database.connect
end
it "ডাটাবেসের সাথে সংযুক্ত থাকে" do
expect(@db.connected?).to be true
end
endএখানে before(:all) হুকটি ডাটাবেস কানেকশন তৈরি করার জন্য ব্যবহৃত হয়েছে, যা describe ব্লকের মধ্যে প্রথম টেস্টের আগে একবারই চলবে।
4. after(:all)
এই হুকটি একবারে describe ব্লকের শেষে চলে। এটি সাধারণত টেস্টের পরের কাজ যেমন ডাটাবেস কানেকশন বন্ধ করা, ফাইল সিস্টেম পরিষ্কার করা ইত্যাদি কাজের জন্য ব্যবহৃত হয়।
উদাহরণ:
describe "Database connection" do
after(:all) do
@db.disconnect
end
it "ডাটাবেসের সাথে সংযুক্ত থাকে" do
expect(@db.connected?).to be true
end
endএখানে after(:all) হুকটি ডাটাবেস কানেকশন বন্ধ করার জন্য ব্যবহৃত হয়েছে, যা describe ব্লকের শেষে একবার চলবে।
Resource Cleanup এর গুরুত্ব
- পারফরম্যান্স বাড়ানো: টেস্টের পর রিসোর্স ক্লিনআপ নিশ্চিত করে যে পরবর্তী টেস্টের জন্য কোনও অব্যবহৃত বা অপ্রয়োজনীয় রিসোর্স অবশিষ্ট থাকে না।
- নির্ভরযোগ্যতা বৃদ্ধি: প্রতিটি টেস্টে কোডের আচরণ একইভাবে পরীক্ষিত হয়, কারণ আগের টেস্টের পর অবশিষ্ট কিছু থাকতে পারে না।
- সহজ ডিবাগিং: যদি কোনও টেস্টে সমস্যা হয়, তখন Hooks ব্যবহার করে কোডের অবস্থা পরিষ্কার করা সহজ হয়।
সারাংশ
RSpec এ Hooks ব্যবহৃত হয় resource cleanup বা প্রস্তুতির জন্য। এগুলি কোডের আচরণ নিশ্চিত করার জন্য অত্যন্ত কার্যকরী, কারণ এগুলি টেস্ট শুরু এবং শেষ হওয়ার আগে বা পরে কিছু কাজ করে থাকে। before(:each), after(:each), before(:all), এবং after(:all) হুকগুলির সাহায্যে টেস্টের পূর্ববর্তী ও পরবর্তী অবস্থা নিয়ন্ত্রণ করা যায়।
Read more