2014-06-23 34 views
1

我有一個模擬對象爲下面的類使用部分

class Book(object): 

    def __init__(self): 
     self._counter = 1 

    @property 
    def counter(self): 
     _, self._counter = self._counter, self._counter + 1 
     return _ 

Book Python測試屬性具有以下模擬對象

book = Mock(spec = Book, self._counter = 1) 

如果計數器不我可以寫測試作爲這樣的屬性

def test_counter(self): 
    book.counter = partial(Book.counter, book) 
    self.assertNotEquals(book.counter(), book.counter()) 

但是,由於它是一個屬性,上述策略將不起作用,你可以建議因爲我必須爲Book類使用Mock對象,所以我爲此編寫了測試屬性的好方法。

回答

1
def test_counter(self): 
    book.counter = partial(Book.counter.fget, book) 
    self.assertNotEquals(book.counter(), book.counter()) 
+0

你能解釋一下你的答案。 –

+0

實際上'@ property'裝飾器返回一個屬性對象,它具有一個fget函數來實際運行應用裝飾器的底層函數 – Ankur