2015-03-19 17 views
23

Tôi đang cố gắng để hiểu sự khác biệt giữa hai cách tiếp cận này của mocking một phương pháp. Ai đó có thể vui lòng giúp phân biệt chúng? Ví dụ này, tôi sử dụng thư viện passlibSự khác biệt giữa mock.patch.object (... và 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) 

Trả lời

38

Bạn đã khám phá ra sự khác biệt;.. mock.patch() mất một chuỗi đó sẽ được giải quyết đến một đối tượng khi áp dụng các bản vá, mock.patch.object() mất một tài liệu tham khảo trực tiếp

Điều này có nghĩa rằng mock.patch() không yêu cầu e rằng bạn nhập khẩu đối tượng trước khi vá, trong khi mock.patch.object() yêu cầu bạn nhập trước khi vá.

Sau đó, sau đó dễ sử dụng hơn nếu bạn đã có tham chiếu đến đối tượng.

+1

Cảm ơn câu trả lời của bạn, Martijn và để làm rõ. – Dowwie

Các vấn đề liên quan