2013-11-01 16 views
11

Ho familiarità con altre librerie di mocking in altri linguaggi come Mockito in Java, ma la libreria di Python mock mi confonde.Mocking di un singolo metodo su un oggetto

Ho la seguente classe che vorrei testare.

class MyClassUnderTest(object): 

    def submethod(self, *args): 
     do_dangerous_things() 

    def main_method(self): 
     self.submethod("Nothing.") 

Nel mio test, mi piacerebbe fare in modo che il submethod è stato chiamato quando main_method è stato eseguito e che è stato chiamato con gli argomenti giusti. Non voglio eseguire submethod, poiché fa cose pericolose.

Sono completamente insicuro su come iniziare con questo. La documentazione di Mock è incredibilmente difficile da capire e non sono sicuro di cosa deridere o come deriderlo.

Come posso simulare la funzione submethod, lasciando la funzionalità in main_method da solo?

risposta

15

penso che quello che stai cercando è mock.patch.object

with mock.patch.object(MyClassUnderTest, "submethod") as submethod_mocked: 
    submethod_mocked.return_value = 13 
    MyClassUnderTest().main_method() 
    submethod_mocked.assert_called_once_with(user_id, 100, self.context, 
              self.account_type) 

Ecco piccola descrizione

patch.object(target, attribute, new=DEFAULT, 
       spec=None, create=False, spec_set=None, 
       autospec=None, new_callable=None, **kwargs) 

rattoppare il membro denominato (attributo) su un oggetto (target) con un oggetto fittizio .

+0

Grazie, per qualche motivo ho avuto difficoltà a comprendere tutti i diversi metodi 'patch' e come usarli. –

+0

ok. sentiti libero di chiedermelo – oleg

Problemi correlati