2016-12-22 2 views
0

クラスプロパティをどのように嘲笑することができますか?偽装されたプロパティはクラス内では機能しません。プロパティのPython mock.patch.object

コードサンプル:

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()) 

戻り値:

<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' 

答えて

1

ただ、プロパティでそれをパッチ:あなたもget_new_sizeようにそれを行う必要があります

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

注意引数を受け入れる:

def get_new_size(self): 
    return 42 
関連する問題