2012-12-12 12 views
7

प्रोसेसर और प्रोसेन्स एक स्ट्रक्चर पर आरएसपीसी डबल का उपयोग करने का क्या होगा? उदाहरण के लिएरूबी बनाम स्ट्रक्चर बनाम परीक्षण

before :each do 
    location = double "locatoin" 
    location.stub(:id => 1) 
end 

बनाम

before :each do 
    location = Struct.new("locatoin", :id) 
    location.new.id = 1 
end 

उत्तर

8

टेस्ट डबल्स स्थापित करने के लिए आसान है

Slip = Struct.new(:id) 
slip = Slip.new(:id => 1) 

बनाम

slip = double('slip', :id => 1) 

टेस्ट डबल्स अधिक सूचना वाले त्रुटि संदेश

require 'spec_helper' 

class TooLongError < StandardError; end 

class Boat 
    def moor(slip) 
    slip.moor!(self) 
    rescue TooLongError 
    false 
    end 
end 

describe Boat do 
    let(:boat) { subject } 

    context "when slip won't accept boat" do 
    it "can't be moored" do 
     Slip = Struct.new('Slip') 
     slip = Slip.new 
     boat.moor(slip).should be_false 
    end 
    end 
end 
Failure/Error: slip.moor!(self) 
NoMethodError: 
    undefined method `moor!' for #<struct Struct::Slip > 

बनाम

it "can't be moored" do 
    slip = double('slip') 
    boat.moor(slip).should be_false 
end 
Failure/Error: slip.moor!(self) 
    Double "slip" received unexpected message :moor! with (#<Boat:0x106b90c60>) 

टेस्ट डबल्स है उत्पन्न परीक्षण के लिए बेहतर समर्थन

class Boat 
    def moor(slip) 
    slip.dont_care 
    slip.moor!(self) 
    rescue TooLongError 
    false 
    end 
end 

it "can't be moored" do 
    Slip = Struct.new('Slip') 
    slip = Slip.new 
    slip.should_receive(:moor!).and_raise(TooLongError) 
    boat.moor(slip).should be_false 
end 
Failure/Error: slip.dont_care 
NoMethodError: 
    undefined method `dont_care' for #<struct Struct::Slip > 

बनाम

it "can't be moored" do 
    slip = double('slip').as_null_object 
    slip.should_receive(:moor!).and_raise(TooLongError) 
    boat.moor(slip).should be_false 
end 

0 failures # passed!

कुछ उदाहरण है कि - मैं मुझे यकीन है कि परीक्षण युगल पसंद करने के कई और कारण हैं।

+0

मुझे पता है कि आखिरी पोस्ट के बाद से इसमें कुछ सालों हैं, लेकिन क्या कोई मौका है कि आप उदाहरण को बदलने में कोई दिक्कत नहीं करेंगे? मुझे नहीं पता कि नौकाओं या स्लिप को नौकाओं के साथ क्या करना है, और यह मेरे लिए चीजों को समझने की कोशिश करना मुश्किल बना रहा है। यदि नहीं, तो वैसे भी धन्यवाद! – SirUncleCid