Re: [rspec-users] How do I specify that a class does not receive any message

2012-08-22 Thread Lenny Marks

On Aug 22, 2012, at 1:38 PM, Lenny Marks wrote:

> 
> On Aug 22, 2012, at 10:36 AM, David Chelimsky wrote:
> 
>> On Wed, Aug 22, 2012 at 9:16 AM, J. B. Rainsberger  wrote:
>>> On Wed, Aug 22, 2012 at 10:07 AM, David Chelimsky 
>>> wrote:
 
 On Wed, Aug 22, 2012 at 7:52 AM, J. B. Rainsberger  wrote:
> On Tue, Aug 21, 2012 at 11:37 PM, Bas Vodde  wrote:
>> 
>> 
>> JB is right.
>> 
>> Sometimes, for clarity, it is useful to add should_not, but for
>> functionality it is usually not needed.
> 
> 
> I know JMock has never() for this people. Should RSpec-mocks have
> something
> like object.should_receive(:nothing).
 
 never() is not a catch all for _all_ messages. It is for a specific
 message, just like it is in rspec-mocks
 
 # rspec
 object.should_receive(:msg).never
 
 #jmock
 never(object).msg()
>>> 
>>> 
>>> In JMock, you can write this:
>>> 
>>> never(object);
>>> 
>>> and this means "never anything". Just like
>>> 
>>> ignoring(object);
>>> allowing(object);
>>> 
>>> which each equate to mock().as_null_object().
>> 
>> Perhaps it goes without saying, but I was not aware of that ;)
>> 
>> As you noted earlier this thread (not quoted above) RSpec::Mocks::Mock
>> instances (returned by double(), mock(), or stub()) are strict by
>> default - e.g. they'll complain about any unexpected messages.
>> Obviously that does not account for any real objects.
>> 
>> I'm open to adding an API for this, but not
>> object.should_receive(:nothing) since that syntax is for declaring
>> expected messages.
>> 
> 
> +1 for me. I've found myself on occasion using 
> should_not_receive(:some_message). OK, see a failing spec, make it pass, but 
> what about when the collaborator method is renamed. All those 
> should_not_receive expectations will still pass no matter what. It would be 
> great to have object.should_receive(:nothing) instead. This would make life 
> easier when collaborators are stubbed out with :as_null_object stubs.

I mean some equivalent to object.should_receive(:nothing). Maybe 
object.should_receive_nothing ?? 

> 
> -lenny
> 
>> Other ideas welcome.
>> ___
>> rspec-users mailing list
>> rspec-users@rubyforge.org
>> http://rubyforge.org/mailman/listinfo/rspec-users
> 
> ___
> rspec-users mailing list
> rspec-users@rubyforge.org
> http://rubyforge.org/mailman/listinfo/rspec-users

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


Re: [rspec-users] How do I specify that a class does not receive any message

2012-08-22 Thread Lenny Marks

On Aug 22, 2012, at 10:36 AM, David Chelimsky wrote:

> On Wed, Aug 22, 2012 at 9:16 AM, J. B. Rainsberger  wrote:
>> On Wed, Aug 22, 2012 at 10:07 AM, David Chelimsky 
>> wrote:
>>> 
>>> On Wed, Aug 22, 2012 at 7:52 AM, J. B. Rainsberger  wrote:
 On Tue, Aug 21, 2012 at 11:37 PM, Bas Vodde  wrote:
> 
> 
> JB is right.
> 
> Sometimes, for clarity, it is useful to add should_not, but for
> functionality it is usually not needed.
 
 
 I know JMock has never() for this people. Should RSpec-mocks have
 something
 like object.should_receive(:nothing).
>>> 
>>> never() is not a catch all for _all_ messages. It is for a specific
>>> message, just like it is in rspec-mocks
>>> 
>>>  # rspec
>>>  object.should_receive(:msg).never
>>> 
>>>  #jmock
>>>  never(object).msg()
>> 
>> 
>> In JMock, you can write this:
>> 
>> never(object);
>> 
>> and this means "never anything". Just like
>> 
>> ignoring(object);
>> allowing(object);
>> 
>> which each equate to mock().as_null_object().
> 
> Perhaps it goes without saying, but I was not aware of that ;)
> 
> As you noted earlier this thread (not quoted above) RSpec::Mocks::Mock
> instances (returned by double(), mock(), or stub()) are strict by
> default - e.g. they'll complain about any unexpected messages.
> Obviously that does not account for any real objects.
> 
> I'm open to adding an API for this, but not
> object.should_receive(:nothing) since that syntax is for declaring
> expected messages.
> 

+1 for me. I've found myself on occasion using 
should_not_receive(:some_message). OK, see a failing spec, make it pass, but 
what about when the collaborator method is renamed. All those 
should_not_receive expectations will still pass no matter what. It would be 
great to have object.should_receive(:nothing) instead. This would make life 
easier when collaborators are stubbed out with :as_null_object stubs.

-lenny

> Other ideas welcome.
> ___
> rspec-users mailing list
> rspec-users@rubyforge.org
> http://rubyforge.org/mailman/listinfo/rspec-users

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


Re: [rspec-users] How do I specify that a class does not receive any message

2012-08-22 Thread J. B. Rainsberger
On Wed, Aug 22, 2012 at 11:36 AM, David Chelimsky wrote:

> On Wed, Aug 22, 2012 at 9:16 AM, J. B. Rainsberger  wrote:
> > On Wed, Aug 22, 2012 at 10:07 AM, David Chelimsky 
> > wrote:
> >>
> >> On Wed, Aug 22, 2012 at 7:52 AM, J. B. Rainsberger 
> wrote:
> >> > On Tue, Aug 21, 2012 at 11:37 PM, Bas Vodde  wrote:
> >> >>
> >> >>
> >> >> JB is right.
> >> >>
> >> >> Sometimes, for clarity, it is useful to add should_not, but for
> >> >> functionality it is usually not needed.
> >> >
> >> >
> >> > I know JMock has never() for this people. Should RSpec-mocks have
> >> > something
> >> > like object.should_receive(:nothing).
> >>
> >> never() is not a catch all for _all_ messages. It is for a specific
> >> message, just like it is in rspec-mocks
> >>
> >>   # rspec
> >>   object.should_receive(:msg).never
> >>
> >>   #jmock
> >>   never(object).msg()
> >
> >
> > In JMock, you can write this:
> >
> > never(object);
> >
> > and this means "never anything". Just like
> >
> > ignoring(object);
> > allowing(object);
> >
> > which each equate to mock().as_null_object().
>
> Perhaps it goes without saying, but I was not aware of that ;)
>

I am at your service.


> As you noted earlier this thread (not quoted above) RSpec::Mocks::Mock
> instances (returned by double(), mock(), or stub()) are strict by
> default - e.g. they'll complain about any unexpected messages.
> Obviously that does not account for any real objects.
>
> I'm open to adding an API for this, but not
> object.should_receive(:nothing) since that syntax is for declaring
> expected messages.
>

I agree that that doesn't work. Is object.should_receive_nothing completely
out of the question?
-- 
J. B. (Joe) Rainsberger :: http://www.jbrains.ca ::
http://blog.thecodewhisperer.com
Author, JUnit Recipes
Free Your Mind to Do Great Work :: http://www.freeyourmind-dogreatwork.com
___
rspec-users mailing list
rspec-users@rubyforge.org
http://rubyforge.org/mailman/listinfo/rspec-users

Re: [rspec-users] How do I specify that a class does not receive any message

2012-08-22 Thread David Chelimsky
On Wed, Aug 22, 2012 at 9:16 AM, J. B. Rainsberger  wrote:
> On Wed, Aug 22, 2012 at 10:07 AM, David Chelimsky 
> wrote:
>>
>> On Wed, Aug 22, 2012 at 7:52 AM, J. B. Rainsberger  wrote:
>> > On Tue, Aug 21, 2012 at 11:37 PM, Bas Vodde  wrote:
>> >>
>> >>
>> >> JB is right.
>> >>
>> >> Sometimes, for clarity, it is useful to add should_not, but for
>> >> functionality it is usually not needed.
>> >
>> >
>> > I know JMock has never() for this people. Should RSpec-mocks have
>> > something
>> > like object.should_receive(:nothing).
>>
>> never() is not a catch all for _all_ messages. It is for a specific
>> message, just like it is in rspec-mocks
>>
>>   # rspec
>>   object.should_receive(:msg).never
>>
>>   #jmock
>>   never(object).msg()
>
>
> In JMock, you can write this:
>
> never(object);
>
> and this means "never anything". Just like
>
> ignoring(object);
> allowing(object);
>
> which each equate to mock().as_null_object().

Perhaps it goes without saying, but I was not aware of that ;)

As you noted earlier this thread (not quoted above) RSpec::Mocks::Mock
instances (returned by double(), mock(), or stub()) are strict by
default - e.g. they'll complain about any unexpected messages.
Obviously that does not account for any real objects.

I'm open to adding an API for this, but not
object.should_receive(:nothing) since that syntax is for declaring
expected messages.

Other ideas welcome.
___
rspec-users mailing list
rspec-users@rubyforge.org
http://rubyforge.org/mailman/listinfo/rspec-users


Re: [rspec-users] How do I specify that a class does not receive any message

2012-08-22 Thread J. B. Rainsberger
On Wed, Aug 22, 2012 at 10:07 AM, David Chelimsky wrote:

> On Wed, Aug 22, 2012 at 7:52 AM, J. B. Rainsberger  wrote:
> > On Tue, Aug 21, 2012 at 11:37 PM, Bas Vodde  wrote:
> >>
> >>
> >> JB is right.
> >>
> >> Sometimes, for clarity, it is useful to add should_not, but for
> >> functionality it is usually not needed.
> >
> >
> > I know JMock has never() for this people. Should RSpec-mocks have
> something
> > like object.should_receive(:nothing).
>
> never() is not a catch all for _all_ messages. It is for a specific
> message, just like it is in rspec-mocks
>
>   # rspec
>   object.should_receive(:msg).never
>
>   #jmock
>   never(object).msg()
>

In JMock, you can write this:

never(object);

and this means "never anything". Just like

ignoring(object);
allowing(object);

which each equate to mock().as_null_object().
-- 
J. B. (Joe) Rainsberger :: http://www.jbrains.ca ::
http://blog.thecodewhisperer.com
Author, JUnit Recipes
Free Your Mind to Do Great Work :: http://www.freeyourmind-dogreatwork.com
___
rspec-users mailing list
rspec-users@rubyforge.org
http://rubyforge.org/mailman/listinfo/rspec-users

Re: [rspec-users] How do I specify that a class does not receive any message

2012-08-22 Thread David Chelimsky
On Wed, Aug 22, 2012 at 7:52 AM, J. B. Rainsberger  wrote:
> On Tue, Aug 21, 2012 at 11:37 PM, Bas Vodde  wrote:
>>
>>
>> JB is right.
>>
>> Sometimes, for clarity, it is useful to add should_not, but for
>> functionality it is usually not needed.
>
>
> I know JMock has never() for this people. Should RSpec-mocks have something
> like object.should_receive(:nothing).

never() is not a catch all for _all_ messages. It is for a specific
message, just like it is in rspec-mocks

  # rspec
  object.should_receive(:msg).never

  #jmock
  never(object).msg()




> --
> J. B. (Joe) Rainsberger :: http://www.jbrains.ca ::
> http://blog.thecodewhisperer.com
> Author, JUnit Recipes
> Free Your Mind to Do Great Work :: http://www.freeyourmind-dogreatwork.com
>
>
> ___
> rspec-users mailing list
> rspec-users@rubyforge.org
> http://rubyforge.org/mailman/listinfo/rspec-users
___
rspec-users mailing list
rspec-users@rubyforge.org
http://rubyforge.org/mailman/listinfo/rspec-users


Re: [rspec-users] How do I specify that a class does not receive any message

2012-08-22 Thread J. B. Rainsberger
On Tue, Aug 21, 2012 at 11:37 PM, Bas Vodde  wrote:

>
> JB is right.
>
> Sometimes, for clarity, it is useful to add should_not, but for
> functionality it is usually not needed.
>

I know JMock has never() for this people. Should RSpec-mocks have something
like object.should_receive(:nothing).
-- 
J. B. (Joe) Rainsberger :: http://www.jbrains.ca ::
http://blog.thecodewhisperer.com
Author, JUnit Recipes
Free Your Mind to Do Great Work :: http://www.freeyourmind-dogreatwork.com
___
rspec-users mailing list
rspec-users@rubyforge.org
http://rubyforge.org/mailman/listinfo/rspec-users

Re: [rspec-users] How do I specify that a class does not receive any message

2012-08-21 Thread Bas Vodde

JB is right.

Sometimes, for clarity, it is useful to add should_not, but for functionality 
it is usually not needed.

Bas


On 22 Aug, 2012, at 4:12 AM, J. B. Rainsberger  wrote:

> On Tue, Aug 21, 2012 at 5:02 PM, Andrew Premdas  wrote:
> I want to write
> 
> it "should ..." do
>   Client.should_not_receive(any_message)
>   # do something here that might do Client.xxx
> end
> 
> I might be wrong, but if you use a mock object and set no expectations on it, 
> it will expect no messages. Have you tried that?
> -- 
> J. B. (Joe) Rainsberger :: http://www.jbrains.ca :: 
> http://blog.thecodewhisperer.com
> Author, JUnit Recipes
> Free Your Mind to Do Great Work :: http://www.freeyourmind-dogreatwork.com
> 
> ___
> rspec-users mailing list
> rspec-users@rubyforge.org
> http://rubyforge.org/mailman/listinfo/rspec-users

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


Re: [rspec-users] How do I specify that a class does not receive any message

2012-08-21 Thread J. B. Rainsberger
On Tue, Aug 21, 2012 at 5:02 PM, Andrew Premdas  wrote:

> I want to write
>
> it "should ..." do
>   Client.should_not_receive(any_message)
>   # do something here that might do Client.xxx
> end
>

I might be wrong, but if you use a mock object and set no expectations on
it, it will expect no messages. Have you tried that?
-- 
J. B. (Joe) Rainsberger :: http://www.jbrains.ca ::
http://blog.thecodewhisperer.com
Author, JUnit Recipes
Free Your Mind to Do Great Work :: http://www.freeyourmind-dogreatwork.com
___
rspec-users mailing list
rspec-users@rubyforge.org
http://rubyforge.org/mailman/listinfo/rspec-users