Skill

RSpec এর মৌলিক ধারণা (Basic Concepts of RSpec)

আরএসপেক (RSpec) - Computer Programming

388

RSpec হল একটি রুবি-ভিত্তিক টেস্টিং ফ্রেমওয়ার্ক যা বিহেভিয়ার ড্রিভেন ডেভেলপমেন্ট (BDD) পদ্ধতি অনুসরণ করে। এটি প্রধানত তিনটি মৌলিক ধারণা বা উপাদান দ্বারা গঠিত, যা RSpec এর মূল কার্যকারিতা নিশ্চিত করে। এই মৌলিক ধারণাগুলি হল ডেসক্রাইব (describe), ইট (it), এবং **এক্সপেক্ট (expect)**।


১. ডেসক্রাইব (describe)

describe হল RSpec-এর একটি ব্লক, যার মাধ্যমে একটি নির্দিষ্ট ফিচার, ক্লাস, বা মেথডের আচরণ বর্ণনা করা হয়। এটি কোডের বিভিন্ন ইউনিট বা ফিচারের টেস্ট গ্রুপ তৈরি করতে ব্যবহৃত হয়। এর মধ্যে যে কোড টেস্ট করা হবে তা রাখা হয়। এটি মূলত একটি টেস্টের বর্ণনামূলক শিরোনাম হিসেবে কাজ করে।

উদাহরণ:

describe "Calculator" do
  # এখানে কোড থাকবে
end

এখানে "Calculator" হল টেস্টের বিষয়, যার মধ্যে সংশ্লিষ্ট ফিচার বা ক্লাসের আচরণ পরীক্ষা করা হবে।


২. ইট (it)

it ব্লকটি একটি নির্দিষ্ট টেস্টের আচরণ বর্ণনা করে এবং সেটির প্রত্যাশিত আউটপুট নির্ধারণ করে। এই ব্লকটি কোডের সেই অংশটিকে বর্ণনা করে যা পরীক্ষা করা হবে। এটি "এই আচরণটি সঠিকভাবে কাজ করবে" এমন একটি গঠনমূলক বাক্য হিসেবে লেখা হয়।

উদাহরণ:

it "দুটি সংখ্যার যোগফল সঠিকভাবে বের করে" do
  expect(2 + 3).to eq(5)
end

এখানে "দুটি সংখ্যার যোগফল সঠিকভাবে বের করে" হল টেস্টের উদ্দেশ্য, এবং expect(2 + 3).to eq(5) হল সেই টেস্টের পরীক্ষণ, যা যাচাই করে যে ২ এবং ৩ এর যোগফল সত্যিই ৫ হয় কিনা।


৩. এক্সপেক্ট (expect)

expect হল RSpec-এর একটি গুরুত্বপূর্ণ অংশ, যা কোডের আউটপুট যাচাই করতে ব্যবহৃত হয়। এটি টেস্টের অপ্রত্যাশিত ফলাফলগুলিকে শনাক্ত করতে সহায়ক। expect কোডের ফলাফল বা আউটপুটের সাথে সম্পর্কিত প্রত্যাশা (expectation) তৈরি করে, এবং তারপরে বিভিন্ন ম্যাচার (matcher) ব্যবহার করে ফলাফলের সাথে তুলনা করা হয়।

ম্যাচার (Matchers): RSpec-এ অনেক ধরনের ম্যাচার রয়েছে, যেগুলি পরীক্ষায় ব্যবহৃত হয়। যেমন:

  • eq: সমান কিনা যাচাই করে।
  • be: সত্য বা মিথ্যা যাচাই করে।
  • include: কোনো উপাদান বা মান অন্তর্ভুক্ত আছে কিনা যাচাই করে।

উদাহরণ:

expect(2 + 3).to eq(5)  # সমান কিনা যাচাই

এখানে expect(2 + 3) বলে যে আমরা ২ ও ৩ এর যোগফল যাচাই করতে চাই এবং .to eq(5) দ্বারা এটি পরীক্ষা করা হচ্ছে যে যোগফলটি ৫ এর সমান কিনা।


৪. বিফোর, আফটার (before, after)

RSpec এ হুকস হিসেবে পরিচিত before এবং after ব্লক ব্যবহার করা হয়। এই ব্লকগুলি টেস্ট চালানোর আগে বা পরে কিছু কোড চালাতে সহায়ক।

  • before(:each): প্রতিটি টেস্টের আগে কিছু কোড চালানোর জন্য ব্যবহার হয়।
  • after(:each): প্রতিটি টেস্টের পরে কিছু কোড চালানোর জন্য ব্যবহার হয়।

উদাহরণ:

before(:each) do
  # প্রতিটি টেস্টের আগে চালানো হবে
  @calculator = Calculator.new
end

after(:each) do
  # প্রতিটি টেস্টের পরে চালানো হবে
  @calculator.clear
end

৫. লেট (let)

let একটি বিলম্বিত ভ্যালু আর্কিটেকচার তৈরি করতে ব্যবহৃত হয়, যা টেস্টের মধ্যে পুনরায় ব্যবহার করা যেতে পারে। এটি একটি ভ্যারিয়েবল তৈরি করে, যা প্রতিটি টেস্টে ব্যবহৃত হবে এবং সেই ভ্যারিয়েবলটি শুধুমাত্র সেই টেস্টেই ব্যবহার করা যাবে যেখানে এটি ডিফাইন করা হয়েছে।

উদাহরণ:

let(:calc) { Calculator.new }

it "দুটি সংখ্যার যোগফল সঠিকভাবে বের করে" do
  expect(calc.add(2, 3)).to eq(5)
end

সারাংশ

RSpec-এ তিনটি মূল ধারণা হলো ডেসক্রাইব (describe), ইট (it), এবং এক্সপেক্ট (expect), যা কোডের আচরণ পরীক্ষা করতে ব্যবহৃত হয়। এছাড়া before এবং after হুকস এবং let এর মতো ফিচারগুলি কোডের পুনঃব্যবহারযোগ্যতা এবং টেস্টের কার্যকারিতা বৃদ্ধি করতে সহায়ক। RSpec টেস্ট লেখার মাধ্যমে আপনি নিশ্চিত করতে পারবেন যে আপনার কোড সঠিকভাবে কাজ করছে এবং কোন ধরণের ত্রুটি না ঘটে।

Content added By

RSpec ফ্রেমওয়ার্কে Spec, Example, এবং Test Cases প্রতিটি একটি নির্দিষ্ট ধরনের একক পরীক্ষা বা কোডের আচরণ যাচাই করার জন্য ব্যবহৃত হয়। এই তিনটি ধারণা রুবি কোডের টেস্টিং প্রক্রিয়াকে স্পষ্ট, সংগঠিত এবং সুনির্দিষ্ট করে তোলে।


Spec

Spec একটি গ্রুপ বা কন্টেইনার যা একটি নির্দিষ্ট ফিচার, ক্লাস বা মেথডের জন্য টেস্ট সংজ্ঞায়িত করে। এটি কোডের আচরণ এবং কার্যকারিতা যাচাই করার জন্য ব্যবহৃত হয়। মূলত describe ব্লক হল RSpec-এ Spec তৈরির প্রক্রিয়া, যেখানে একটি ফিচারের বা মেথডের আচরণ পরীক্ষা করা হয়।

উদাহরণ:

describe "Calculator" do
  # এখানে টেস্টের অন্যান্য অংশ থাকবে
end

এখানে "Calculator" একটি Spec হিসাবে বিবেচিত হচ্ছে যা describe ব্লকের মধ্যে তার আচরণ পরীক্ষা করবে।


Example

Example হল একটি নির্দিষ্ট টেস্ট, যা একটি নির্দিষ্ট কার্যকারিতা বা ফিচারের আচরণ পরীক্ষা করে। এটি it ব্লকের মাধ্যমে উল্লেখ করা হয় এবং এটি একটি একক পরীক্ষা হিসেবে কাজ করে। Example হচ্ছে সেই নির্দিষ্ট আচরণ বা আউটপুট যা কোড থেকে আশা করা হয়।

উদাহরণ:

describe "Calculator" do
  it "যোগফল সঠিকভাবে বের করে" do
    expect(2 + 3).to eq(5)
  end
end

এখানে, "যোগফল সঠিকভাবে বের করে" একটি Example, যা it ব্লকের মধ্যে নির্দিষ্ট করে দেয় কীভাবে Calculator ক্লাসের আচরণ পরীক্ষিত হবে।


Test Case

Test Case হল একটি নির্দিষ্ট এগজাম্পল (Example) যা কোডের কোনো নির্দিষ্ট আউটপুট বা আচরণ পরীক্ষা করে। এটি একটি বাস্তব জীবন পরিস্থিতির জন্য নির্দিষ্ট কোডের কার্যকারিতা যাচাই করার উদ্দেশ্যে ব্যবহৃত হয়। এক বা একাধিক Example মিলিয়ে একটি Test Case তৈরি হয়।

উদাহরণ:

describe "Calculator" do
  it "যোগফল সঠিকভাবে বের করে" do
    expect(2 + 3).to eq(5)
  end
  
  it "বিয়োগফল সঠিকভাবে বের করে" do
    expect(5 - 3).to eq(2)
  end
end

এখানে দুটি Test Case রয়েছে:

  1. "যোগফল সঠিকভাবে বের করে"
  2. "বিয়োগফল সঠিকভাবে বের করে"

প্রতিটি Test Case একটি নির্দিষ্ট কাজ বা ফিচারের সঠিকতা যাচাই করার জন্য তৈরি করা হয়েছে।


সারাংশ

  • Spec: একটি গ্রুপ বা কন্টেইনার যেখানে একাধিক Example বা Test Case থাকে এবং একটি নির্দিষ্ট ফিচারের আচরণ পরীক্ষা করা হয়।
  • Example: একটি একক পরীক্ষা যা একটি নির্দিষ্ট আচরণ বা আউটপুট যাচাই করে।
  • Test Case: একটি বা একাধিক Example থেকে তৈরি একটি সম্পূর্ণ পরীক্ষা যা কোডের একটি নির্দিষ্ট অংশের সঠিকতা যাচাই করে।

এগুলো RSpec-এ কোডের আচরণ পরীক্ষা করার মূল ধারণা এবং কাঠামো। RSpec এর মাধ্যমে প্রতিটি ফিচার বা কোড ইউনিট সঠিকভাবে কাজ করছে কিনা নিশ্চিত করা যায়।

Content added By

RSpec এর মৌলিক সেগমেন্ট হলো describe, context, এবং it ব্লক, যা সফটওয়্যার টেস্টিংয়ের প্রধান কাঠামো তৈরি করে। এগুলো ব্যবহার করে আপনি আপনার কোডের কার্যকারিতা এবং আচরণ পরীক্ষা করতে পারেন। চলুন, এগুলোর ব্যাখ্যা দেখি:


১. describe ব্লক

describe ব্লকটি মূলত একটি গ্রুপ তৈরি করে যেখানে আপনি একটি নির্দিষ্ট ফিচার, ক্লাস, মেথড বা ফাংশনের আচরণ বর্ণনা করেন। এটি টেস্টের প্রাথমিক স্তম্ভ, যা সমস্ত টেস্টগুলোকে একত্রিত করে।

Sintax:

describe "ফিচারের নাম বা মেথড" do
  # টেস্ট কেস এখানে থাকবে
end

উদাহরণ:

describe "একটি ক্যালকুলেটর" do
  it "যে দুটি সংখ্যার যোগফল সঠিকভাবে বের করে" do
    expect(2 + 3).to eq(5)
  end
end

২. context ব্লক

context ব্লকটি একটি বিশেষ ধরনের describe ব্লক, যা ব্যবহারকারীদের কোডের আচরণ সম্পর্কিত বিভিন্ন শর্ত বা অবস্থার অধীনে টেস্ট কেসগুলো নির্ধারণ করতে সাহায্য করে। এটি বিশেষভাবে টেস্টের বিভিন্ন শর্ত বা পরিস্থিতি ব্যাখ্যা করতে ব্যবহৃত হয়।

context ব্যবহার করলে টেস্টগুলো আরও পরিষ্কার এবং সহজবোধ্য হয়, কারণ এটি শর্তাধীন অবস্থা বা ব্যবহারের ভিন্নতা বর্ণনা করতে সাহায্য করে।

Sintax:

context "শর্তের বর্ণনা" do
  # টেস্ট কেস এখানে থাকবে
end

উদাহরণ:

describe "একটি ক্যালকুলেটর" do
  context "যখন দুটি ধনাত্মক সংখ্যা যোগ করা হয়" do
    it "যে যোগফল সঠিক হবে" do
      expect(2 + 3).to eq(5)
    end
  end
  
  context "যখন দুটি নেতিবাচক সংখ্যা যোগ করা হয়" do
    it "যে যোগফল সঠিক হবে" do
      expect(-2 + -3).to eq(-5)
    end
  end
end

৩. it ব্লক

it ব্লকটি একটি নির্দিষ্ট পরীক্ষার কাজ সম্পাদন করে। এটি একটি বিশেষ আচরণ বা পরীক্ষার শর্ত নির্ধারণ করে এবং আপনি যে ফিচারটি পরীক্ষা করছেন তা যাচাই করতে ব্যবহৃত হয়।

it ব্লকটি সাধারণত একটি বর্ণনামূলক বাক্য হিসেবে লেখা হয়, যা একটি নির্দিষ্ট পরীক্ষা বা আচরণ ব্যাখ্যা করে।

Sintax:

it "বর্ণনা" do
  # পরীক্ষার কোড
end

উদাহরণ:

describe "একটি ক্যালকুলেটর" do
  it "যে দুটি সংখ্যার যোগফল সঠিকভাবে বের করে" do
    expect(2 + 3).to eq(5)
  end
end

একত্রে ব্যবহার

এই তিনটি ব্লক একত্রে ব্যবহার করে একটি পূর্ণাঙ্গ পরীক্ষা লেখা যায়। উদাহরণস্বরূপ, নিচে একটি সাধারণ ক্যালকুলেটরের টেস্ট কোড:

describe "একটি ক্যালকুলেটর" do
  context "যখন দুটি ধনাত্মক সংখ্যা যোগ করা হয়" do
    it "যে যোগফল সঠিকভাবে বের হবে" do
      expect(2 + 3).to eq(5)
    end
  end
  
  context "যখন দুটি নেতিবাচক সংখ্যা যোগ করা হয়" do
    it "যে যোগফল সঠিকভাবে বের হবে" do
      expect(-2 + -3).to eq(-5)
    end
  end
end

এই কোডে:

  • describe ব্লকটি ক্যালকুলেটর ফিচারের জন্য একটি সাধারণ বর্ণনা প্রদান করছে।
  • context ব্লক দুটি আলাদা শর্তের অধীনে টেস্টগুলো সন্নিবেশ করেছে।
  • it ব্লক প্রতিটি শর্তের অধীনে নির্দিষ্ট আচরণ বা পরীক্ষার জন্য ব্যবহৃত হয়েছে।

সারাংশ

  • describe ব্লক: একটি কোডের অংশ বা ফিচারের পরীক্ষা করার জন্য ব্যবহৃত হয়।
  • context ব্লক: একটি নির্দিষ্ট শর্ত বা পরিস্থিতির অধীনে টেস্ট করার জন্য ব্যবহৃত হয়।
  • it ব্লক: একটি নির্দিষ্ট আচরণ বা পরীক্ষার শর্ত যাচাই করার জন্য ব্যবহৃত হয়।

এই তিনটি ব্লক একত্রে RSpec এর কার্যকর টেস্টিং কাঠামো তৈরি করতে সাহায্য করে, যা কোডের কার্যকারিতা এবং আচরণ যাচাই করতে খুবই কার্যকর।

Content added By

RSpec এ Matchers হলো এমন বিশেষ ফিচার যা একটি মান (value) বা অবজেক্টের সাথে একটি নির্দিষ্ট শর্তের মিল আছে কিনা তা যাচাই করতে ব্যবহৃত হয়। Matchers সাধারণত expect এর সাথে ব্যবহৃত হয়, যা একটি মানের প্রত্যাশিত ফলাফল যাচাই করে।


১. expect

RSpec-এ expect একটি মৌলিক টেস্টিং কনসেপ্ট। এটি একটি নির্দিষ্ট মান বা অবজেক্টের প্রত্যাশিত আউটপুট পরীক্ষা করে। expect সাধারণত একটি টেস্টের শুরুতে ব্যবহার করা হয়, তারপর তার সাথে এক বা একাধিক matcher যুক্ত করা হয়।

উদাহরণ:

expect(5).to eq(5)  # এটা পরীক্ষা করবে যে 5 সত্যিই 5 এর সমান কিনা

২. eq

eq Matcher ব্যবহার করা হয় মানের সমতা যাচাই করতে। এটি দুটি মানের সমতা পরীক্ষা করে। যদি মান দুটি সমান হয়, তবে টেস্ট পাস করবে।

উদাহরণ:

expect(5 + 3).to eq(8)  # এটা পরীক্ষা করবে যে 5 + 3 সমান 8 কিনা

এখানে, expect(5 + 3) এর ফলাফল 8 হওয়া উচিত এবং eq(8) দ্বারা এটি যাচাই করা হচ্ছে।


৩. be

be Matcher মূলত বুলিয়ান মান বা অবজেক্টের অবস্থা যাচাই করার জন্য ব্যবহৃত হয়। এটি বিশেষ করে প্রকৃত মান বা অবজেক্টের অবস্থার তুলনা করার জন্য ব্যবহার করা হয়।

  • be যখন true বা false এর সাথে ব্যবহার করা হয় তখন এটি বুলিয়ান মানের জন্য সঠিক।
  • এটি যদি অবজেক্টের তুলনা করতে হয়, তবে এটি পরীক্ষা করে যে নির্দিষ্ট অবজেক্টটি কোনো বিশেষ অবস্থায় রয়েছে কিনা।

উদাহরণ:

expect(true).to be(true)  # এটা পরীক্ষা করবে যে মানটি সত্য কিনা

এছাড়াও, be ব্যবহার করা হয় একই অবজেক্টের তুলনা করতে:

a = "hello"
b = a
expect(a).to be(b)  # এটা পরীক্ষা করবে যে a এবং b একই অবজেক্ট কিনা

৪. include

include Matcher ব্যবহার করা হয় কোন অ্যারে, হ্যাশ, বা স্ট্রিং এ নির্দিষ্ট উপাদান উপস্থিত কিনা তা পরীক্ষা করতে। এটি একটি ভ্যালু বা অবজেক্টের মধ্যে একটি নির্দিষ্ট উপাদান অন্তর্ভুক্ত কিনা তা যাচাই করে।

উদাহরণ:

expect([1, 2, 3]).to include(2)  # এটা পরীক্ষা করবে যে অ্যারে [1, 2, 3] তে 2 আছে কিনা

এছাড়াও, এটি স্ট্রিংগুলির জন্যও ব্যবহার করা যায়:

expect("Hello world").to include("Hello")  # এটা পরীক্ষা করবে যে স্ট্রিংয়ে "Hello" উপস্থিত কিনা

অন্যান্য Matchers:

৫. not_to

এটি অপ্রত্যাশিত ফলাফল যাচাই করার জন্য ব্যবহৃত হয়। অর্থাৎ, যদি কোন শর্ত পূর্ণ না হয়, তবে এটি যাচাই করে।

expect(5 + 3).not_to eq(10)  # এটা পরীক্ষা করবে যে 5 + 3 সমান 10 নয়

৬. be_nil

nil অবস্থা যাচাই করার জন্য ব্যবহৃত হয়।

expect(nil).to be_nil  # এটা পরীক্ষা করবে যে মানটি nil কিনা

সারাংশ

RSpec এ Matchers খুবই শক্তিশালী টেস্টিং টুল, যা ডেভেলপারদের তাদের কোডের ফলাফল বা আচরণ যাচাই করার জন্য ব্যবহৃত হয়। Matchers যেমন expect, eq, be, এবং include ডেভেলপারদের বিভিন্ন ধরণের যাচাই করার সুবিধা দেয়—যথা মানের সমতা, অবস্থা পরীক্ষা, এবং উপাদান অন্তর্ভুক্তি। RSpec-এর এই Matchers ব্যবহার করে কোডের সঠিকতা নিশ্চিত করা অনেক সহজ এবং পরিষ্কার হয়।

Content added By

RSpec ব্যবহার করে একটি সাধারণ টেস্ট লেখা এবং তা রান করার পদ্ধতি খুবই সহজ। এখানে আমরা একটি সাধারণ উদাহরণ দেখব যেটি কোডের সঠিকতা যাচাই করবে।


১. RSpec ইনস্টল করা

প্রথমে নিশ্চিত করুন আপনার সিস্টেমে RSpec ইনস্টল করা আছে। যদি না থাকে, তবে এটি ইনস্টল করতে নিচের কমান্ডটি চালান:

gem install rspec

২. RSpec সেটআপ

একটি নতুন রুবি প্রজেক্টে RSpec ব্যবহার করতে rspec --init কমান্ডটি চালিয়ে সেটআপ করতে হবে। এটি একটি spec/ ডিরেক্টরি এবং একটি spec_helper.rb ফাইল তৈরি করবে।

rspec --init

৩. Simple Test লেখা

ধরা যাক, আমাদের একটি Calculator ক্লাস আছে, যা দুটি সংখ্যার যোগফল নির্ণয় করবে। এবার আমরা এর একটি টেস্ট লিখব।

Calculator কোড:

# calculator.rb
class Calculator
  def add(a, b)
    a + b
  end
end

টেস্ট কোড:

# spec/calculator_spec.rb
require './calculator'

describe Calculator do
  it "যে দুটি সংখ্যার যোগফল সঠিকভাবে নির্ণয় করবে" do
    calc = Calculator.new
    expect(calc.add(2, 3)).to eq(5)
  end
end

এখানে:

  • describe ব্লকে আমরা Calculator ক্লাসের টেস্ট নির্ধারণ করেছি।
  • it ব্লকে আমরা একটি নির্দিষ্ট আচরণ পরীক্ষা করেছি, যা হলো 2 + 3 এর যোগফল 5 হওয়া উচিত।
  • expect এবং eq ব্যবহার করে আমরা নির্দিষ্ট ফলাফলটি যাচাই করেছি।

৪. টেস্ট রান করা

আপনি যদি টেস্টটি চালাতে চান, তবে নিচের কমান্ডটি ব্যবহার করুন:

rspec

এটি spec/ ডিরেক্টরির সব টেস্ট ফাইল রান করবে এবং ফলাফল দেখাবে। যদি আপনার টেস্টটি সঠিকভাবে পাস করে, তাহলে আউটপুটে নিচের মতো কিছু দেখতে পাবেন:

.

Finished in 0.00123 seconds (files took 0.12345 seconds to load)
1 example, 0 failures

এখানে, 1 example, 0 failures অর্থাৎ একটি টেস্ট সফলভাবে সম্পন্ন হয়েছে এবং কোনো ত্রুটি নেই।


৫. নির্দিষ্ট টেস্ট রান করা

যদি আপনি শুধুমাত্র একটি নির্দিষ্ট টেস্ট ফাইল রান করতে চান, তবে নিচের কমান্ডটি ব্যবহার করুন:

rspec spec/calculator_spec.rb

এটি শুধুমাত্র calculator_spec.rb ফাইলের টেস্টগুলি রান করবে।


৬. টেস্ট ফরম্যাট এবং রঙ ব্যবহার

RSpec আপনাকে টেস্টের ফলাফল রঙিন আউটপুট দেখানোর জন্য সহায়ক ফিচার সরবরাহ করে। টেস্টে রঙ ব্যবহার করতে, spec_helper.rb ফাইলের মধ্যে নিচের কোডটি যোগ করুন:

RSpec.configure do |config|
  config.color = true
  config.formatter = :documentation
end

এটি টেস্টের আউটপুটকে আরও পঠনযোগ্য এবং রঙিন করবে।


সারাংশ

এটি ছিল RSpec দিয়ে একটি সাধারণ টেস্ট লেখার এবং রান করার প্রাথমিক পদ্ধতি। RSpec এর মাধ্যমে আপনি খুব সহজেই আপনার কোডের সঠিকতা যাচাই করতে পারবেন এবং সফটওয়্যার ডেভেলপমেন্টে টেস্টিংয়ের ভূমিকা নিশ্চিত করতে পারবেন।

Content added By
Promotion

Are you sure to start over?

Loading...