我想测试ReadAdwords
类方法get_keywords
。下面的代码可以工作,但是测试会引发以下错误:AttributeError: Mock object has no attribute 'get'
。
source code说GetService()
返回“一个googleads.common.GoogleSoapService实例,该实例的标头和代理配置为使用。”
我无法在源中的任何地方找到def get(
,不仅是在返回的soap服务实例上。这里发生了什么?有没有办法在仍使用autospec=True
的同时对此进行修补?
PHP库中的等效get
方法是here。
我在搜索堆栈溢出时发现的唯一类似问题是this。
课程:
class ReadAdwords:
def __init__(self, adwords_client):
self.adwords_client = adwords_client
def get_keywords(self, selector):
ad_group_criterion_service = self.adwords_client.GetService(
"AdGroupCriterionService", version="v201809"
)
return ad_group_criterion_service.get(selector)
测试:
@patch("googleads.common.GoogleSoapService", autospec=True)
@patch("googleads.adwords.AdWordsClient", autospec=True)
def test_get_keywords(mock_Adwords_client, mock_google_soap_service):
read_adwords = ReadAdwords(mock_Adwords_client)
mock_Adwords_client.GetService.return_value = mock_google_soap_service
read_adwords.get_keywords("a string")
mock_Adwords_client.GetService.assert_called_once()
mock_google_soap_service.get.assert_called_once()