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


_______________________________________________
rspec-users mailing list
rspec-users@rubyforge.org
http://rubyforge.org/mailman/listinfo/rspec-users

Reply via email to