如果我有这样的功能:
@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)
还有这样的测试:
| name | rank | type |
| one | 1 | T1 |
| two | 2 | T2 |
| thr | 3 | T2 |
| fou | 4 | T1 |
| fiv | 5 | T2 |
| six | 6 | T2 |
| sev | 7 | T2 |
我还想引用那些不同的电话号码对象,以便检查它们的设置是否正确。我不确定如何获得对它们的引用。
答案 0 :(得分:0)
您可以使用.getChildren()
访问电子名片的所有子级
例如:
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']
访问所有电话号码,然后进行遍历。