I was reading some old posts on how we shouldn''t test private methods, but there seemed to be an exception for states. When my model enters a state, a method is executed. (:on => Proc ...) I just want to test this method. I couldn''t find much material on it. How can I go about this? Thanks, Ramon Tayag
On Wed, Nov 19, 2008 at 7:17 AM, Ramon Tayag <ramon.tayag at gmail.com> wrote:> I was reading some old posts on how we shouldn''t test private methods, > but there seemed to be an exception for states. > > When my model enters a state, a method is executed. (:on => Proc ...) > I just want to test this method. I couldn''t find much material on it. > How can I go about this?While there are always exceptions to guidelines, I''ve never seen a general exception to "don''t test privates" for states. Are you averse to just going at this from the public API?> > Thanks, > Ramon Tayag > _______________________________________________ > rspec-users mailing list > rspec-users at rubyforge.org > http://rubyforge.org/mailman/listinfo/rspec-users >
Not sure if I''m understanding right, but no, I can make the method public -- I just got used to methods, that aren''t (or don''t need to be) called by anything but its owner, being private. If I make it public it solves my question somewhat :) Thanks, Ramon Tayag On Wed, Nov 19, 2008 at 9:52 PM, David Chelimsky <dchelimsky at gmail.com> wrote:> On Wed, Nov 19, 2008 at 7:17 AM, Ramon Tayag <ramon.tayag at gmail.com> wrote: >> I was reading some old posts on how we shouldn''t test private methods, >> but there seemed to be an exception for states. >> >> When my model enters a state, a method is executed. (:on => Proc ...) >> I just want to test this method. I couldn''t find much material on it. >> How can I go about this? > > While there are always exceptions to guidelines, I''ve never seen a > general exception to "don''t test privates" for states. > > Are you averse to just going at this from the public API? > >> >> Thanks, >> Ramon Tayag >> _______________________________________________ >> rspec-users mailing list >> rspec-users at rubyforge.org >> http://rubyforge.org/mailman/listinfo/rspec-users >> > _______________________________________________ > rspec-users mailing list > rspec-users at rubyforge.org > http://rubyforge.org/mailman/listinfo/rspec-users >
On Wed, Nov 19, 2008 at 7:55 AM, Ramon Tayag <ramon.tayag at gmail.com> wrote:> On Wed, Nov 19, 2008 at 9:52 PM, David Chelimsky <dchelimsky at gmail.com> wrote: >> On Wed, Nov 19, 2008 at 7:17 AM, Ramon Tayag <ramon.tayag at gmail.com> wrote: >>> I was reading some old posts on how we shouldn''t test private methods, >>> but there seemed to be an exception for states. >>> >>> When my model enters a state, a method is executed. (:on => Proc ...) >>> I just want to test this method. I couldn''t find much material on it. >>> How can I go about this? >> >> While there are always exceptions to guidelines, I''ve never seen a >> general exception to "don''t test privates" for states. >> >> Are you averse to just going at this from the public API?> Not sure if I''m understanding right, but no, I can make the method > public -- I just got used to methods, that aren''t (or don''t need to > be) called by anything but its owner, being private.I didn''t mean make the methods public. I meant use the public API. For example, this: describe Dog do it "should increase its heart rate when the postman arrives" do dog = Dog.new lambda {dog.see Postman.new}.should change{dog.heartrate}.by(10) end end rather than this: describe Dog do it "should transition to an agitated state when the postman arrives" do dog = Dog.new dog.should_receive(:transition_to).with(:agitated) dog.see Postman.new end end Make sense?> > If I make it public it solves my question somewhat :) > > Thanks, > Ramon Tayag>> >>> >>> Thanks, >>> Ramon Tayag >>> _______________________________________________ >>> rspec-users mailing list >>> rspec-users at rubyforge.org >>> http://rubyforge.org/mailman/listinfo/rspec-users >>> >> _______________________________________________ >> rspec-users mailing list >> rspec-users at rubyforge.org >> http://rubyforge.org/mailman/listinfo/rspec-users >> > _______________________________________________ > rspec-users mailing list > rspec-users at rubyforge.org > http://rubyforge.org/mailman/listinfo/rspec-users >
Ahh.. yes, you do. Thanks a lot! That definitely answers my question. Ramon Tayag On Wed, Nov 19, 2008 at 10:01 PM, David Chelimsky <dchelimsky at gmail.com> wrote:> I didn''t mean make the methods public. I meant use the public API. > > For example, this: > > describe Dog do > it "should increase its heart rate when the postman arrives" do > dog = Dog.new > lambda {dog.see Postman.new}.should change{dog.heartrate}.by(10) > end > end > > rather than this: > > describe Dog do > it "should transition to an agitated state when the postman arrives" do > dog = Dog.new > dog.should_receive(:transition_to).with(:agitated) > dog.see Postman.new > end > end > > Make sense?
-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 On 19 Nov 2008, at 14:01, David Chelimsky wrote:> For example, this: > > describe Dog do > it "should increase its heart rate when the postman arrives" do > dog = Dog.new > lambda {dog.see Postman.new}.should change{dog.heartrate}.by(10) > end > end > > rather than this: > > describe Dog do > it "should transition to an agitated state when the postman > arrives" do > dog = Dog.new > dog.should_receive(:transition_to).with(:agitated) > dog.see Postman.new > end > endCan I just say that that is a truly great example :-) Rahoul Baruah Web design and development: http://www.3hv.co.uk/ Nottingham Forest: http://www.eighteensixtyfive.co.uk/ Serious Rails Hosting: http://www.brightbox.co.uk/ Lifecast: http://www.madeofstone.net/ -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.8 (Darwin) iEYEARECAAYFAkkkIv4ACgkQu0BNRvjN8xSqWACfRAq1jiaqQnxDfvhdG/F1xy4A qeMAn11P+WAcY8F7XVENIfMl1BEE9sO5 =Vp0S -----END PGP SIGNATURE-----
In other words, the object changes its private state to achieve a publically visible result (otherwise, why bother?) Test that result. ///ark -------------- next part -------------- An HTML attachment was scrubbed... URL: <http://rubyforge.org/pipermail/rspec-users/attachments/20081119/b37f2950/attachment.html>
In other words, the object changes its private state to achieve a publically visible result (otherwise, why bother?) Test that result. ///ark -------------- next part -------------- An HTML attachment was scrubbed... URL: <http://rubyforge.org/pipermail/rspec-users/attachments/20081119/27eecc44/attachment.html>