[rspec-users] specs on private methods
Jarkko Laine
jarkko at jlaine.net
Thu Jan 10 15:25:31 EST 2008
On 10.1.2008, at 22.21, Francois Wurmus wrote:
> Apart from private or public methods I see a problem in your test
> case.
> You don't make sure that your mac_address is returned in exactly the
> way
> you want - you are merely saying it should look like the return
> value of
> some (protected) method you call (normalize_mac).
>
> Let's assume this method was implemented wrong and just returns nil.
> Let's further assume that @signup.mac_address calls a reader method
> returning nil, too. Such an implementation, though wrong, would
> satisfy
> your spec!
>
> A second problem is, that the parameter you are passing to the
> normalize-method will already have been transformed before your method
> gets its hands on it. You are not passing the init value but the value
> that is returned be a read operation on the mac_address field.
>
> What you really should specify is your concrete mac address format:
>
> it "should return a valid mac address" do
> @signup.mac_address = "00-11-22-33-44-55"
> @signup.mac_address.should == "00:11:22:33:44:55"
> end
>
> Now you are not only implementation independent but your spec is also
> saying more.
Also, this line of code is a bit smelly:
>> normalized = @signup.normalize_mac(@signup.mac_address)
Since normalize_mac is an instance method in the Signup class, there's
no point passing the mac_address as a parameter; the method can simply
call the mac_address method directly. If you want to make it more
general-purpose, it doesn't sound like it should be an instance method
anymore.
//jarkko
--
Jarkko Laine
http://jlaine.net
http://dotherightthing.com
http://www.railsecommerce.com
http://odesign.fi
More information about the rspec-users
mailing list