2016-12-22 1 views
0

Wie könnte eine Klasseneigenschaft verspottet werden? Die gespottete Eigenschaft funktioniert nicht innerhalb der Klasse.Python mock.patch.object für Eigenschaften

Codebeispiel:

class Box(object): 
    def __init__(self, size): 
     self._size = size 

    @property 
    def size(self): 
     return self._size 

    def volume(self): 
     print(self.size) 
     return self.size**3 

def get_new_size(): 
    return 42 


box = Box(13) 
with mock.patch.object(Box, 'size', get_new_size): 
    print(box.volume()) 

Returns:

<bound method Box.get_new_size of <__main__.Box object at 0x10a8b2cd0>> 
Traceback (most recent call last): 
    File "<stdin>", line 2, in <module> 
    File "<stdin>", line 9, in volume 
TypeError: unsupported operand type(s) for ** or pow(): 'instancemethod' and 'int' 

Antwort

1

Sie es einfach mit einer Eigenschaft Patch:

with mock.patch.object(Box, 'size', property(get_new_size)): 
    print(box.volume()) 

Beachten Sie, dass Sie es auch machen werden müssen, damit get_new_size akzeptiert ein Argument:

def get_new_size(self): 
    return 42 
Verwandte Themen