Exception Handling এর জন্য Test লেখা

Exception Handling এবং Edge Case Testing (এক্সেপশন হ্যান্ডলিং এবং এজ কেস টেস্টিং) - আরএসপেক (RSpec) - Computer Programming

314

Exception Handling হচ্ছে প্রোগ্রামিংয়ে এমন একটি পদ্ধতি যার মাধ্যমে অ্যাপ্লিকেশনে বিভিন্ন ত্রুটি (error) বা ব্যতিক্রম (exception) সঠিকভাবে মোকাবেলা করা হয়। RSpec দিয়ে exception handling টেস্ট লেখার মাধ্যমে আপনি নিশ্চিত হতে পারেন যে, আপনার কোড বিভিন্ন ধরনের ত্রুটি সঠিকভাবে ধরা এবং সেগুলোর সাথে উপযুক্তভাবে কাজ করছে।

RSpec এ exception handling টেস্ট লেখার জন্য raise_error ম্যাচার ব্যবহার করা হয়। এটি পরীক্ষায় ব্যবহৃত কোডের মধ্যে ত্রুটি উঠছে কিনা এবং ত্রুটির প্রকার সঠিক কি না তা যাচাই করে।


১. সাধারণ Exception Handling Test

ধরা যাক, আপনার একটি ক্লাস রয়েছে যেটি একটি ভ্যালিডেশন যাচাই করে এবং যদি ইনপুট সঠিক না হয় তবে একটি exception রেইজ করে:

class Calculator
  def divide(a, b)
    raise "Cannot divide by zero" if b == 0
    a / b
  end
end

এখন আপনি RSpec দিয়ে পরীক্ষা করবেন যে, যদি দ্বিতীয় ইনপুট 0 হয়, তবে "Cannot divide by zero" ত্রুটিটি সঠিকভাবে রেইজ হচ্ছে কি না।

টেস্ট কোড:

RSpec.describe Calculator do
  describe "#divide" do
    it "যখন বিভাজক ০ হবে, তখন ত্রুটি রেইজ করবে" do
      calc = Calculator.new
      expect { calc.divide(10, 0) }.to raise_error("Cannot divide by zero")
    end
  end
end

এখানে:

  • expect { calc.divide(10, 0) }: এটি divide মেথড কল করার সময় রেইজ হওয়া exception চেক করে।
  • to raise_error("Cannot divide by zero"): এটি নিশ্চিত করে যে, যখন বিভাজক 0 হবে, তখন "Cannot divide by zero" ত্রুটি রেইজ হবে।

২. Custom Exception Handling Test

আপনি যদি একটি কাস্টম exception তৈরি করে থাকেন, তাহলে তাও RSpec দিয়ে পরীক্ষা করা যেতে পারে।

কাস্টম Exception তৈরি:

class InvalidInputError < StandardError; end

class Calculator
  def divide(a, b)
    raise InvalidInputError, "দ্বিতীয় ইনপুট হতে হবে ০ এর বাইরে" if b == 0
    a / b
  end
end

এখন, আপনি এই কাস্টম exception এর জন্য টেস্ট লিখতে পারেন।

টেস্ট কোড:

RSpec.describe Calculator do
  describe "#divide" do
    it "যখন বিভাজক ০ হবে, তখন InvalidInputError ত্রুটি রেইজ করবে" do
      calc = Calculator.new
      expect { calc.divide(10, 0) }.to raise_error(InvalidInputError, "দ্বিতীয় ইনপুট হতে হবে ০ এর বাইরে")
    end
  end
end

এখানে:

  • InvalidInputError একটি কাস্টম exception ক্লাস।
  • raise_error(InvalidInputError, "দ্বিতীয় ইনপুট হতে হবে ০ এর বাইরে") নিশ্চিত করছে যে, ত্রুটির প্রকার এবং বার্তা উভয়ই সঠিক।

৩. Multiple Exceptions Handling Test

একই কোডে একাধিক ধরনের exception handling টেস্টও করা যেতে পারে। ধরুন, আপনার Calculator ক্লাসে দুটি আলাদা exception handling রয়েছে:

ক্লাস কোড:

class Calculator
  def divide(a, b)
    raise ArgumentError, "অবৈধ ইনপুট" if a.nil? || b.nil?
    raise ZeroDivisionError, "বিভাজক শূন্য হতে পারে না" if b == 0
    a / b
  end
end

এখন, আপনি দুটি আলাদা exception পরীক্ষা করবেন:

টেস্ট কোড:

RSpec.describe Calculator do
  describe "#divide" do
    it "যখন কোন ইনপুট nil হবে, তখন ArgumentError ত্রুটি রেইজ করবে" do
      calc = Calculator.new
      expect { calc.divide(nil, 5) }.to raise_error(ArgumentError, "অবৈধ ইনপুট")
    end

    it "যখন বিভাজক ০ হবে, তখন ZeroDivisionError ত্রুটি রেইজ করবে" do
      calc = Calculator.new
      expect { calc.divide(10, 0) }.to raise_error(ZeroDivisionError, "বিভাজক শূন্য হতে পারে না")
    end
  end
end

এখানে:

  • ArgumentError এবং ZeroDivisionError দুইটি আলাদা exception ধরা হচ্ছে, এবং তাদের বার্তা সঠিকভাবে যাচাই করা হচ্ছে।

৪. Exception Handling Without Message

যদি আপনি শুধুমাত্র exception এর উপস্থিতি যাচাই করতে চান, বার্তার প্রয়োজন না থাকে, তাহলে আপনি বার্তা ছাড়া শুধুমাত্র exception প্রকার যাচাই করতে পারেন:

টেস্ট কোড:

RSpec.describe Calculator do
  describe "#divide" do
    it "যখন বিভাজক ০ হবে, তখন ZeroDivisionError রেইজ করবে" do
      calc = Calculator.new
      expect { calc.divide(10, 0) }.to raise_error(ZeroDivisionError)
    end
  end
end

এখানে:

  • raise_error(ZeroDivisionError) শুধু exception প্রকার পরীক্ষা করছে, বার্তার প্রতি কোনো যাচাই করা হচ্ছে না।

সারাংশ

RSpec দিয়ে exception handling টেস্ট লেখার মাধ্যমে আপনি আপনার কোডের ত্রুটির প্রকার এবং তাদের বার্তা যাচাই করতে পারেন। এটি কোডের robust এবং error-free নিশ্চিত করার জন্য অত্যন্ত গুরুত্বপূর্ণ। raise_error ম্যাচার ব্যবহার করে আপনি exception রেইজ হচ্ছে কিনা, এবং রেইজ হওয়া exception সঠিক কি না তা পরীক্ষা করতে পারেন।

Content added By
Promotion

Are you sure to start over?

Loading...