2014-05-09 85 views
0

爲了測試目的,我需要創建一些類似具有某些特定字段的空對象。讓我舉例闡明:如何創建具有所需字段的'空'對象

目前有一種結構:

var = { 
    'blas': { 
     'bla':  0.250, 
     'bla1':  0.300, 
     'bla2': 6, 
     ... 
    }, 
    'somth1': self.smth1, 
    'something': [ 
     { 'h1': 66.00 }, 
     { 'h2': 47.00 }, 
     { 'h3': 85.00 }, 
     { 'h4': 32.00 }, 
     { 'h5': 34.00 } 
    ], 
    'this_has_to_be_object'.field: 1 
} 

我想要的東西是'this_has_to_be_object'是一個實際的對象,而我可以添加一些領域和設定值。這種行爲的目的是測試與'this_has_to_be_object'.field一起運行的另一個功能。

+0

爲什麼不只是創建一個空字典或那個值?或者你需要一些支持任意屬性而不是鍵的東西? –

+1

看起來(「爲了測試目的......」)他正在構建虛擬數據以發送給某些代碼進行測試。 – RemcoGerlich

回答

1

Namedtuples上的方式,如果他們不必須是可變的:

from collections import namedtuple 

MyTupleType = namedtuple('MyTupleType', ['field']) 

yourobject = MyTupleType(field=3) 

print(yourobject.field) # prints 3 

如果是用於測試,然後使用模擬庫也方便(見http://www.voidspace.org.uk/python/mock/; unittest.mock也是自Python 3.3以來的標準庫的一部分)。

yourobject = MagicMock() 
yourobject.field = 3 

注意yourobject現在有任何字段或方法您嘗試訪問它,它們的值都是另一個MagicMock實例。這是一個非常強大的單元測試工具。

最後你可以創建一個無聊的啞類:

class Dummy(object): 
    pass 

yourobject = Dummy() 
yourobject.field = 3 
+0

非常感謝!我採取了MagickMock()方式來解決我的問題。 –

1
class TestData(object): 
    def __init__(self, **dict): 
     self.__dict__.update(dict) 

var = { 
    'blas': { 
     'bla':  0.250, 
     'bla1':  0.300, 
     'bla2': 6, 
    }, 
    'somth1': 2, 
    'something': [ 
     { 'h1': 66.00 }, 
     { 'h2': 47.00 }, 
     { 'h3': 85.00 }, 
     { 'h4': 32.00 }, 
     { 'h5': 34.00 } 
    ], 
    'this_has_to_be_object': TestData(field=1) 
} 

所以:

>>> var['this_has_to_be_object'].field 
1 
+0

'this_has_to_be_object'是OP樣本中的一個字符串。我*認爲* OP希望'var ['this_has_to_be_object']。field'工作,請參閱對該問題的評論。我很確定,將'this_has_to_be_object.field'解析爲一個鍵不是他們想要的。 –

+0

啊,好的。編輯。 – rogual

+0

謝謝您的寶貴意見!我選擇了MagickMock()的方式,因爲它是一個測試。 –

1
var = { 
'blas': { 
    'bla':  0.250, 
    'bla1':  0.300, 
    'bla2': 6, 
    ... 
}, 
'somth1': self.smth1, 
'something': [ 
    { 'h1': 66.00 }, 
    { 'h2': 47.00 }, 
    { 'h3': 85.00 }, 
    { 'h4': 32.00 }, 
    { 'h5': 34.00 } 
], 
'this_has_to_be_object':{'field': '1'} 

}

這已經是一個對象,如果你說you want to add some field inside你可以不喜歡它

...this_has_to_be_object.newField = 3; 

是不是你想要的?

+0

是的,謝謝 - 這正是我想知道的:) –

1

爲什麼不使用默認字典 here.e.g.

var = defaultdict(int) 

var.update({ 
    'blas': { 
     'bla':  0.250, 
     'bla1':  0.300, 
     'bla2': 6, 
     ... 
    }, 
    'somth1': self.smth1, 
    'something': [ 
     { 'h1': 66.00 }, 
     { 'h2': 47.00 }, 
     { 'h3': 85.00 }, 
     { 'h4': 32.00 }, 
     { 'h5': 34.00 } 
    ], 
    'this_has_to_be_object'.field: 1 
} 
) 

現在VAR [「東西」]總是以0

返回我想這是你需要進行測試,右邊的功能?

+0

它看起來像這樣。我選擇了MagickMock作爲解決方案,因爲它在這裏更合適。謝謝! –

相關問題