আরএসপেক বনাম পরীক্ষার :: ইউনিটে জেলগুলি ails


15

আরএসপেক থেকে টেস্ট :: ইউনিট থেকে রুবেলের ইউনিট থেকে রিলগুলিতে (আরএসপেক সম্পর্কে সময়ে সময়ে পড়া সত্ত্বেও) আপনি যে সুবিধাগুলি পেয়েছেন সে সম্পর্কে সত্যই আমি নিশ্চিত হতে পারি না।

এটি আরএসপেক সম্পর্কে কী যে বেশিরভাগ রেল প্রকল্প এটি ব্যবহার করছে বলে মনে হচ্ছে?

(কিছু কোডের উদাহরণগুলির মধ্যে পরিষ্কারভাবে অন্যগুলির সুবিধাগুলি ইঙ্গিত করে অনেক প্রশংসা করা হবে)


4
মাত্র 1 বছর পরে এবং আমি টেস্টে ঘৃণার সাথে দেখতে :: ইউনিট ... আরএসপেক এফটিডব্লু!
পাওয়ে গোসিকি

স্ট্যাকওভারফ্লোতে নকলের নিকটবর্তী: আরএসপেক বনাম টেস্ট :: ইউনিট এবং
আরএসপেক

উত্তর:


13

এটি মূলত স্বাদের বিষয়, এবং বেশিরভাগ পরীক্ষার সরঞ্জামগুলি তাদের লবণের জন্য উভয়ই সমর্থন করে। আমার ব্যক্তিগত পছন্দটি টেস্টের ওপরে আরএসপেকের জন্য: ইউনিট কারণ ক) পরীক্ষাগুলির আউটপুট এবং বিন্যাসটি পরীক্ষার অধীন অবজেক্টটি কী করণীয় (কোডটি কী তার বিপরীতে) এবং কেন) 'এক্স উচিত ওয়াই' বলে 'এক্স প্রিকিকেট ওয়াই'র প্রতিপাদন করা' তার চেয়ে আমার কাছে আরও বোঝা যায়।

উপরের পয়েন্টগুলির জন্য আপনাকে কিছু প্রসঙ্গ দেওয়ার জন্য, এখানে দুটি কার্যকরী সমতুল্য ইউনিট পরীক্ষার আউটপুট / উত্স কোডের তুলনা এখানে রয়েছে, একটি আরএসপেক ব্যবহার করে রচিত এবং অন্যটি টেস্ট :: ইউনিট ব্যবহার করে।

পরীক্ষার অধীনে কোড

class DeadError < StandardError; end

class Dog
  def bark
    raise DeadError.new "Can't bark when dead" if @dead
    "woof"
  end

  def die
    @dead = true
  end
end

টেস্ট :: ইউনিট

 require 'test/unit'
  require 'dog'

  class DogTest < Test::Unit::TestCase
    def setup
      @dog = Dog.new
    end

    def test_barks
      assert_equal "woof", @dog.bark    
    end

    def test_doesnt_bark_when_dead
      @dog.die
      assert_raises DeadError do
        @dog.bark
      end
    end
  end

RSpec

require 'rspec'
require 'dog'

describe Dog do
  before(:all) do
    @dog = Dog.new
  end

  context "when alive" do
    it "barks" do
      @dog.bark.should == "woof"
    end
  end

  context "when dead" do
    before do
      @dog.die
    end

    it "raises an error when asked to bark" do
      lambda { @dog.bark }.should raise_error(DeadError)
    end
  end
end

পরীক্ষা :: ইউনিট আউটপুট (যতটা সম্ভব আমি এটি তৈরি করতে পারি)

Ξ code/examples → ruby dog_test.rb --verbose
Loaded suite dog_test
Started
test_barks(DogTest): .
test_doesnt_bark_when_dead(DogTest): .

Finished in 0.004937 seconds.

আরএসপেক আউটপুট (ডকুমেন্টেশন ফর্ম্যাটার)

Ξ code/examples → rspec -fd dog_spec.rb 

Dog
  when alive
    barks
  when dead
    raises an error when asked to bark

Finished in 0.00224 seconds
2 examples, 0 failures

2 tests, 2 assertions, 0 failures, 0 errors

পিএস আমি মনে করি বারিন (পূর্ববর্তী প্রতিক্রিয়াকারী) শসাবার (যা আরএসপেক প্রকল্পের মধ্য দিয়ে বেড়েছে তবে স্বতন্ত্র) এবং আরএসপেকের ভূমিকাগুলি বিভক্ত করছে। শসা একটি বিডিডি শৈলীতে স্বয়ংক্রিয় গ্রহণযোগ্যতা পরীক্ষার একটি সরঞ্জাম, যেখানে আরএসপেক একটি পরীক্ষার জন্য কোড লাইব্রেরি যা ইউনিট, সংহতকরণ এবং কার্যকরী স্তরে ব্যবহৃত হতে পারে এবং এটি ব্যবহৃত হয়। অতএব আরএসপেক ব্যবহার ইউনিট টেস্টিংকে বাদ দেয় না - এটি কেবলমাত্র আপনি আপনার ইউনিট পরীক্ষাকে 'চশমা' বলছেন।


আমি এখানে এলে দুঃখ অনুভব করার প্রত্যাশা করিনি
রোমান

3

ইদানীং মনে হচ্ছে শসাগুলি রেল সম্প্রদায়টিতে আরও সমর্থন পাচ্ছে। আরএসপেকের নেতৃত্বের সাথে একটি সাক্ষাত্কার থেকে শুনেছি সংক্ষেপে এই যুক্তিটি (রেলস পডকাস্ট অন পুরানো রুবি থেকে)।

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

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

আরও গুরুত্বপূর্ণ বিষয়, যেহেতু অনেক টিডিডি বিলিভাররা দাবি করছিলেন যে পরীক্ষাগুলি নকশাকে নথিভুক্ত করেছিল, তাই বেশিরভাগ ডকুমেন্টেশন সেরা ছিল না। ভাষা অচেনা-বিকাশকারীদের কাছে টেস্টগুলি মোটামুটি অস্বচ্ছ। তারপরেও, বেশিরভাগ পরীক্ষাগুলি পড়ার পরে নকশাটি তত্ক্ষণাত্ স্পষ্ট হয় না।

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

আমার বোধগম্যতা হল যে শসার, যা পরে এসে আরএসপেকের কাছ থেকে পাঠ শিখার সুবিধা পেয়েছিল, প্রাথমিক লক্ষ্যটি (স্পেসিফিকেশন থেকে বাস্তবায়ন পরীক্ষা করার ক্ষমতা) হারানো ছাড়াই এই মাধ্যমিক লক্ষ্যের আরও ভাল কাজ করে। শসা একটি এপিআই এর মতো মোটামুটি ইংরেজিতে এটি করে যা নন-প্রোগ্রামাররা যুক্তিসঙ্গতভাবে কুঁচকে যেতে পারে। তাদের নতুন যাচাইকরণ পদ্ধতির কিছু সংজ্ঞা পূরণ করতে প্রোগ্রামারদের থেকে কিছু সাহায্যের প্রয়োজন হতে পারে তবে এটি এক্সটেনসিবল হওয়ার জন্য ডিজাইন করা হয়েছে।

নীচের লাইনটি হ'ল আরএসপেক / শসাবার ইউনিট টেস্টিং পুরোপুরি প্রতিস্থাপন করা উচিত নয়। আপনার নকশাটি ডকুমেন্টিং এবং যাচাই করার জন্য এগুলি আরও উপযুক্ত হতে পারে - তবে বেশ কয়েকটি বাস্তবায়ন পরীক্ষা রয়েছে যা এখনও করা দরকার, বিশেষত সূক্ষ্ম বাগগুলি যা প্রয়োগের নকশাকরণ থেকে নয় implementation এটি আপনাকে লিখতে হবে এমন পরীক্ষার সংখ্যা হ্রাস করে না।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.