I added Partial Mocking, aka Class Level Mocking. For now, I added should_receive and should_not_receive to Object, but it can be moved to Class and/or its own module.<br><br>I understand the Partial Mocking is controversial and dangerous if used incorrectly, but I've been finding myself using them with success.
<br>I'd advocate that Partial Mocking is a &quot;sharp knife&quot; that, if used correctly, can be a nice tool that simplifies tests/specs.<br>Of course when used incorrectly, it can &quot;slice through bone&quot;.<br><br>
Anyways, here is an example. It is committed inside of the stubs branch.<br>How should we proceed?<br><blockquote>require File.dirname(__FILE__) + '/../lib/spec'<br><br>class MockableClass<br>&nbsp; def self.find id<br>&nbsp;&nbsp;&nbsp; return :original_return
<br>&nbsp; end<br>end<br><br>context &quot;A partial mock&quot; do<br><br>&nbsp; specify &quot;should be able to stub objects&quot; do<br>&nbsp;&nbsp;&nbsp; obj = Object.new<br>&nbsp;&nbsp;&nbsp; obj.should_receive(:foobar).and_return {:return_value}<br>&nbsp;&nbsp;&nbsp; obj.foobar.should_equal
 :return_value<br>&nbsp; end<br><br>&nbsp; specify &quot;should work at the class level&quot; do<br>&nbsp;&nbsp;&nbsp; MockableClass.should_receive(:find).and_return {:stub_return}<br>&nbsp;&nbsp;&nbsp; MockableClass.find(1).should_equal :stub_return<br>&nbsp; end<br>
<br>&nbsp; specify &quot;should revert to the original after each spec&quot; do<br>&nbsp;&nbsp;&nbsp; MockableClass.find(1).should_equal :original_return<br>&nbsp; end<br><br>end<br><br></blockquote>Thanks,<br>Brian<br><br>