首页 > 解决方案 > 使用 pytest 修补 googleads 包以进行单元测试

问题描述

我想测试ReadAdwords类方法get_keywords。下面的代码有效,但测试抛出以下错误:AttributeError: Mock object has no attribute 'get'.

源代码说返回“GetService()一个 googleads.common.GoogleSoapService 实例,它配置了标头和代理以供使用。”

我在源中找不到def get(任何地方,而不仅仅是在返回的肥皂服务实例上。这里发生了什么?有没有办法在仍然使用的同时修补这个autospec=True

PHP 库中的等效get方法在此处

我在搜索堆栈溢出时发现的唯一类似问题是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()

标签: pythonpytestgoogle-ads-api

解决方案


推荐阅读