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