Hi Dylan,
See my comments inline.
On 15/08/06, Dylan Bruzenak <dylanb at digitalvalence.com>
wrote:> I had to put in the method() change so that I could do:
>
> phone_book = mock
> phone_book.method(''lookup'').call(''jim'',
''johnson'', ''tx'')
>
> and have it behave as if I had just called lookup directly.
Hmm. You''ve definitely got a point here. I was wondering if you
couldn''t do
something like this...
def test_me
phone_book = mock()
lookup_method = mock()
phone_book.expects(:method).with(''lookup'').returns(lookup_method)
lookup_method.expects(:call).with(''jim'',
''johnson'', ''tx'')
phone_book.method(''lookup'').call(''jim'',
''johnson'', ''tx'')
end
... but it doesn''t seem to replace the "method" method as I
would expect.
I''ll have to look into this a bit further.
> I had to put in the responds_to stuff so that my code wouldn''t
just
> inject the methods; it injects accessors if they do not exist. The
> responds to fix you suggest would fix this problem. I''d just put
both
> accessors in expectations and it would be good to go.
I intend to fix this soon as I mentioned in my last email.
> I ran into two showstoppers last night:
>
> 1. real exception stack traces are being suppressed. When there is an
> exception anywhere in the test I seem to get an expected method not
> called message, with no stack trace for the original exception.
Can you be more specific (maybe send me the stack trace). If I have a test
like so...
def test_me
raise
end
... I get the stack trace I expect. I wonder if you are getting caught out
by the auto-verify. Any method expectations you set up using "expects"
must
end up being fulfilled exactly as specified before the end of a test. If you
just want to stub out the method to give a known return value, use the
"stubs" method...
def test_fails_because_message_was_not_called
object = mock()
object.expects(:message).with(''hello'')
end
def test_passes_because_message_is_called
object = mock()
object.expects(:message).with(''hello'')
object.message(''hello'')
end
def test_passes_even_though_message_is_not_called
object = mock()
object.stubs(:message)
end
I realise that the stack trace is a bit confusing when an expectation is not
fulfilled - tidying that up is already on my list of things to do.
> 2. When working with multiple mocks where one is set up to expect the
> other as a method value I get my second expectation failing. I can try
> to cook up a test case for this if you need one, but it will take me a
> while. I''m being bull dozed with work right now. (Who
isn''t ?)
Hmm. Can you come up with a simple test that fails in this way? I tried this
test and it works fine...
def test_passes
first_object = mock()
second_object = mock()
first_object.expects(:first_method).with(second_object)
first_object.first_method(second_object)
end
> Thanks for the prompt response and for cleaning up my comments. I
don''t
> do a lot of posting actually, I''ll have to get familiar with
textile.
No problem. Feedback is the only way I''m going to improve Mocha.
There''s a
good Textile reference here <http://hobix.com/textile/>.
James.
http://blog.floehopper.org
-------------- next part --------------
An HTML attachment was scrubbed...
URL:
http://rubyforge.org/pipermail/mocha-developer/attachments/20060815/b955bf32/attachment.html