[TIP] Unit testing functions which call super

Harry Percival harry.percival at gmail.com
Wed Aug 13 11:11:43 PDT 2014


If you know what the parent class is in advance, could you use mock.patch
to stub out the parent method?


On 13 August 2014 19:00, Marcin Tustin <Marcin.Tustin at dealertrack.com>
wrote:

>  Hi All,
>
>
>
> I’ve come across a method which I needed to add a unit test for, which
> calls super, e.g.
>
>
>
> def foofunc(self):
>
>     x= do_some_stuff()
>
>     if x:
>
>         return x
>
>     return super(WhatevClass, self).foofunc()
>
>
>
> Now, I don’t want to integration test the whole stack of super foofunc
> methods, just unit test that one, down to the super call.
>
>
>
> I’ve accomplished this with, in my test (excuse the 8 leading spaces):
>
>
>
> def setUp(self):
>
>         self.method_archive = {}
>
>         for klass in WhatevClass.__mro__[1:]:
>
>             # we use the class as its own sentinel
>
>             meth_or_klass = klass.__dict__.get('foofunc', klass)
>
>             if meth_or_klass != klass:
>
>                 self.method_archive[klass] = meth_or_klass
>
>                 del klass.foofunc
>
>         # now patch an arbitrary member of the mro to supply a dummy
> foofunc
>
>         self.sentinel_klass = next(iter(self.method_archive))
>
>         self.mock_sentinel = mock.MagicMock()
>
>         self.sentinel_klass.foofunc = self.mock_sentinel
>
>
>
>
>
> And corresponding unpatching in tearDown.
>
>
>
> Is there any other approach which is standard, or objectively better?
>
>
>
> Thanks,
>
> Marcin
>
>
>
> *Marcin Tustin*
> Senior Software Engineer
>   ------------------------------
>
>
> 1111 Marcus Avenue
> Lake Success, NY 11042
> dealertrack.com <https://www.dealertrack.com/>
>
> p 516.300.7072
>
>
> *dealertrack **technologies*™
>
> Confidentiality Notice: This e-mail and any attachments may contain
> confidential, proprietary information of Dealertrack Technologies. It is
> intended solely for the named recipient(s) listed above and should be
> maintained in strictest confidence. If you are not the intended recipient,
> you are hereby notified that any disclosure, copying, distribution, or use
> of the information contained herein (including any reliance thereon) is
> STRICTLY PROHIBITED. If you have received this e-mail in error, please
> immediately notify the sender and delete this information from your
> computer and destroy any related paper copies. Unless otherwise expressly
> stated in the text of the e-mail, the addition of a typed name or initials
> to this e-mail does not (i) evidence an intent to sign the e-mail or (ii)
> constitute either (a) a signature or (b) consent to use electronic records
> or signatures in place of a writing or a handwritten signature
>
>
>
> _______________________________________________
> testing-in-python mailing list
> testing-in-python at lists.idyll.org
> http://lists.idyll.org/listinfo/testing-in-python
>
>


-- 
------------------------------
Harry J.W. Percival
------------------------------
Twitter: @hjwp
Mobile:  +44 (0) 78877 02511
Skype:         harry.percival
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.idyll.org/pipermail/testing-in-python/attachments/20140813/02b7821d/attachment.htm>


More information about the testing-in-python mailing list