2012-12-12 15 views
7

Artıları ve eksileri bir struct üzerinde rspec double kullanmada ne olurdu? ÖrneğinStruct vs test çift yakutta

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 

cevap

8

Testi çiftler kurmak daha kolaydır

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

vs

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

Testi çiftlerde daha bilgilendirici hata iletileri

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

Testi çiftler var vs üretmek Test için daha iyi destek

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 birkaç örnek

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!

- Ben Eminim test çiftlerini tercih etmek için daha fazla sebep vardır.

+0

Sonuncusu yayınlandığından bu yana birkaç yıl geçtiğini biliyorum, ancak bu örneği değiştirmenin sakıncası olmaz mı? Kayıkların ya da kaymaların teknelerle ne ilgisi olduğunu bilmiyorum ve bir şeyleri anlamaya çalışmak benim için zor oluyor. Değilse, yine de teşekkürler! – SirUncleCid