修补googleads软件包以使用pytest进行单元测试

时间:2018-11-23 11:56:36

标签: python pytest google-adwords

我想测试ReadAdwords类方法get_keywords。下面的代码可以工作,但是测试会引发以下错误:AttributeError: Mock object has no attribute 'get'

source codeGetService()返回“一个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()

0 个答案:

没有答案