用pytes修补用于单元测试的googleads包

2024-09-30 16:39:33 发布

您现在位置:Python中文网/ 问答频道 /正文

我想测试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()

Tags: 实例selfclienttruegetdefservicemock