![](/img/trans.png)
[英]How to set return value to mock object created from another mock object using unittest?
[英]Reference object created in middle of function with unittest mock
如果我有這樣的功能:
def get_vcard():
new_vcard = vobject.vCard()
new_vcard.add('fn')
new_card.fn.value = 'First Last'
work_phone = new_vcard.add('tel')
work_phone.value = '+18005555555'
mobile_phone = new_vcard.add('tel')
mobile_phone.value = '+18885555555'
和這樣的測試:
@patch('myapp.vobject.vCard', autospec=True)
def test_create_card(self, mock_vcard_constructor):
mock_vcard = mock_vcard_constructor.return_value
myapp.get_vcard()
self.assertEqual('First Last', mock_vcard.fn.value)
我還想引用那些不同的電話號碼對象,以便可以檢查它們是否設置正確。 我不確定如何獲得對它們的引用。
您可以使用.getChildren()
訪問vCard的所有子級,例如:
def get_vcard(new_vcard=vobject.vCard()):
new_vcard.add('fn')
new_vcard.fn.value = 'First Last'
work_phone = new_vcard.add('tel')
work_phone.value = '+18005555555'
mobile_phone = new_vcard.add('tel')
mobile_phone.value = '+18885555555'
return new_vcard
現在,您的單元測試將如下所示:
def has_phone(vcard, value):
for child in vcard.getChildren():
if child.value == value:
return True
return False
@patch('myapp.vobject.vCard', autospec=True)
def test_create_card(self, mock_vcard_constructor):
mock_vcard = get_vcard()
self.assertEqual('First Last', mock_vcard.fn.value)
self.assertTrue(has_phone(mock_vcard, '+18005555555'))
self.assertTrue(has_phone(mock_vcard, '+18885555555'))
另一種可能性是使用vcard.contents['tel']
訪問所有電話號碼,然后進行遍歷。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.