2015-03-19 50 views
23

Próbuję zrozumieć różnicę między tymi dwoma podejściami kpiąc z metody.Could ktoś może pomóc rozróżnić je? Dla tego przykładu, I użyj passlib bibliotekęJaka jest różnica między mock.patch.object (... i mock.patch (

from passlib.context import CryptContext 
from unittest import mock 

with mock.patch.object(CryptContext, 'verify', return_value=True) as foo1: 
    mycc = CryptContext(schemes='bcrypt_sha256') 
    mypass = mycc.encrypt('test') 
    assert mycc.verify('tesssst', mypass) 

with mock.patch('passlib.context.CryptContext.verify', return_value=True) as foo2: 
    mycc = CryptContext(schemes='bcrypt_sha256') 
    mypass = mycc.encrypt('test') 
    assert mycc.verify('tesssst', mypass) 

Odpowiedz

38

już odkryto różnicy;.. mock.patch() pobiera ciąg, który zostanie rozwiązany do obiektu przy stosowaniu plastra, mock.patch.object() bierze bezpośredniego odniesienia

oznacza to, że mock.patch() nie wymaga e zaimportujesz obiekt przed łataniem, podczas gdy mock.patch.object() wymaga importowania przed łataniem.

Ten drugi jest łatwiejszy w użyciu, jeśli masz już odniesienie do obiektu.

+1

Dziękuję za odpowiedź, Martijn, i za wyjaśnienie. – Dowwie

Powiązane problemy