2012-12-12 15 views
7

Jakie byłyby plusy i minusy użycia podwójnego rspec nad strukturą? Na przykładStruct vs test double in ruby ​​

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

vs

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

Odpowiedz

8

podwaja testowe są łatwiejsze do skonfigurowania

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

vs.

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

podwaja testowe generować więcej informacyjne komunikaty o błędach

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 > 

porównaniu

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>) 

podwaja testowe mają lepsze wsparcie dla testowania

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 > 

vs.

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!

To tylko kilka przykładów - I Jestem pewien, że jest więcej powodów, dla których warto preferować testowe duble.

+0

Wiem, że minęło kilka lat od ostatniej publikacji, ale czy jest jakaś szansa, że ​​nie miałbyś nic przeciwko zmianie przykładu? Nie wiem, co moor lub slip ma wspólnego z łodziami, a to sprawia, że ​​trudno mi próbować rozgryźć sprawy. Jeśli nie, dziękuję i tak! – SirUncleCid