In general, I recommend that you don't use test doubles in place of value
objects, and generally exception types are value objects.  (That is, they
carry data, but don't have any meaningful behavior and certainly shouldn't
perform any I/O).  Given that, I don't understand why you'd want to use a
test double in place of an exception.

The fact that you find yourself wanting to is probably communicating
something about your design, and you may want to take a step back to think
through why you're trying to use a double in place of an exception.
There's likely an alternate design that will work better.

HTH,
Myron

On Wed, Apr 11, 2018 at 1:34 PM, David Shockley <daemon.shock...@gmail.com>
wrote:

> Cool. That makes sense. My current work around is to use:
>
> allow_any_instance_of(Exception).to receive(:my_custom_method_ive_
> added_to_exception).and_raise
>
> Is there a better solution? Do you think it's possible to write an
> exception_double and exception_spy methods that build subclasses of
> Exception that support the double/spy methods directly, or is that
> unfeasible / a bad idea?
>
>
>
> On 11 April 2018 at 13:01, Myron Marston <myron.mars...@gmail.com> wrote:
>
>> Ruby requires that any object passed to raise must be an exception class
>> or object:
>>
>> 2.4.3 :001 > raise Object.newTypeError: exception class/object expected
>>         from (irb):1:in `raise'
>>         from (irb):1
>>         from /Users/myron/.rvm/rubies/ruby-2.4.3/bin/irb:11:in `<main>'
>>
>> As such, there’s no way to RSpec to be able to raise an arbitrary object.
>>
>> Myron
>> ​
>>
>> On Wed, Apr 11, 2018 at 12:43 PM, Asher Shockley <
>> daemon.shock...@gmail.com> wrote:
>>
>>> Is it possible to have a mocked method raise a mocked object instead of
>>> a real instance of Exception?
>>>
>>> https://gist.github.com/david-shockley-beeline/008ea9122e62b
>>> 051b3614d07a36fae23
>>>
>>> Thanks
>>>
>>> --
>>> You received this message because you are subscribed to the Google
>>> Groups "rspec" group.
>>> To unsubscribe from this group and stop receiving emails from it, send
>>> an email to rspec+unsubscr...@googlegroups.com.
>>> To post to this group, send email to rspec@googlegroups.com.
>>> To view this discussion on the web visit https://groups.google.com/d/ms
>>> gid/rspec/76d123cf-1fe0-4d88-b0fd-47a856253c22%40googlegroups.com
>>> <https://groups.google.com/d/msgid/rspec/76d123cf-1fe0-4d88-b0fd-47a856253c22%40googlegroups.com?utm_medium=email&utm_source=footer>
>>> .
>>> For more options, visit https://groups.google.com/d/optout.
>>>
>>
>> --
>> You received this message because you are subscribed to the Google Groups
>> "rspec" group.
>> To unsubscribe from this group and stop receiving emails from it, send an
>> email to rspec+unsubscr...@googlegroups.com.
>> To post to this group, send email to rspec@googlegroups.com.
>> To view this discussion on the web visit https://groups.google.com/d/ms
>> gid/rspec/CADUxQmv5n_2fYTHRtQpy9%3Dxeom1Cj8Mb4kUS7kQsx-a%3DM
>> 01hEA%40mail.gmail.com
>> <https://groups.google.com/d/msgid/rspec/CADUxQmv5n_2fYTHRtQpy9%3Dxeom1Cj8Mb4kUS7kQsx-a%3DM01hEA%40mail.gmail.com?utm_medium=email&utm_source=footer>
>> .
>>
>> For more options, visit https://groups.google.com/d/optout.
>>
>
> --
> You received this message because you are subscribed to the Google Groups
> "rspec" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to rspec+unsubscr...@googlegroups.com.
> To post to this group, send email to rspec@googlegroups.com.
> To view this discussion on the web visit https://groups.google.com/d/
> msgid/rspec/CACp6SzUuvsS23SRw%2Bgwws3jiTCv-NazBOa3NJGyKBvNt8FV1_g%40mail.
> gmail.com
> <https://groups.google.com/d/msgid/rspec/CACp6SzUuvsS23SRw%2Bgwws3jiTCv-NazBOa3NJGyKBvNt8FV1_g%40mail.gmail.com?utm_medium=email&utm_source=footer>
> .
>
> For more options, visit https://groups.google.com/d/optout.
>

-- 
You received this message because you are subscribed to the Google Groups 
"rspec" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to rspec+unsubscr...@googlegroups.com.
To post to this group, send email to rspec@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/rspec/CADUxQmtYGyYV8CM6Vki0roDdUYkHK38H2EjkN%3DJ0kkbdjAmrnA%40mail.gmail.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to