<HTML><BODY style="word-wrap: break-word; -khtml-nbsp-mode: space; -khtml-line-break: after-white-space; ">Hey guys,<DIV>I'm a big fan of what y'all are trying to do.  I've been running into a few issues with it, in the form of bugs(non-conformity) and ideas.</DIV><DIV><BR class="khtml-block-placeholder"></DIV><DIV><B>Conformity - mock objects</B></DIV><DIV><I>Mocks have a .nil? function</I></DIV><DIV>context "A mock" do</DIV><DIV>  specify "should have no responses to any events" do</DIV><DIV>    @object = mock(:object)</DIV><DIV>    @object.nil?            #Will not raise a mock unexpected message event</DIV><DIV>    @object.object_id       #Will raise a mock unexpected message event</DIV><DIV>  end</DIV><DIV>end</DIV><DIV><I><BR class="khtml-block-placeholder"></I></DIV><DIV><I>Mocks returned by mocks expect an :instance_of call</I></DIV><DIV>context "A mock returning a mock" do</DIV><DIV>  specify "should not receive instance_of message" do</DIV><DIV>    player = mock(:player)</DIV><DIV>    arch_enemy = mock(:arch_enemy)</DIV><DIV>    player.should_receive(:most_hated_enemy).and_return(arch_enemy)</DIV><DIV>    player.most_hated_enemy</DIV><DIV>    # This mock fails with: Mock 'enemy' received unexpected message 'instance_of?' with [&lt;Array:Class&gt;]</DIV><DIV>  end</DIV><DIV>end</DIV><DIV><BR class="khtml-block-placeholder"></DIV><DIV><BR class="khtml-block-placeholder"></DIV><DIV><B>Ideas</B></DIV><DIV><I>Mocks being substituted for real objects - True integration tests for free ?</I></DIV><DIV>Alot of the specs we are writing separate responsibilities among tightly coupled classes.  We are testing the individuality, but if we wanted to test the true integration of those classes we would probably have to create new specs.  How about, instead, creating mock objects from classes themselves and having a rake spec:integrate task.  This task would substitute the real classes for the mocks, which brings me to:</DIV><DIV><BR class="khtml-block-placeholder"></DIV><DIV><I>Mocks/stubs syntax</I></DIV><DIV>Let's say I have a Level object, and that is responsible for reading my map into the game.  I have an object in that map I want to test(err...spec).  Would something like this be feasible?</DIV><DIV>@level = Level.mock</DIV><DIV>or</DIV><DIV>@level = Level.mock(:null_object =&gt; true)</DIV><DIV><BR class="khtml-block-placeholder"></DIV><DIV>Or maybe I have a class that has a GUI portion, and I want to stub that function.</DIV><DIV>@level = Level.stub  #Keeps all the Level functionality and lets you stub things out</DIV><DIV>@level.should_receive(:draw).and_return(true)</DIV><DIV><BR class="khtml-block-placeholder"></DIV><DIV>That way, if you do something like:</DIV><DIV>spec -integrate level_spec.rb</DIV><DIV>it could turn all mocks and stubs into real objects.</DIV><DIV><BR class="khtml-block-placeholder"></DIV><DIV>I'm really excited about the implications this has towards simplifying game design, and I'm hoping that it works well enough to replace Test::Unit for our 3d game framework, Shattered.</DIV><DIV><BR class="khtml-block-placeholder"></DIV><DIV>Thanks,</DIV><DIV>-Mikkel Garcia</DIV><DIV><A href="http://shatteredruby.com">http://shatteredruby.com</A></DIV></BODY></HTML>