python - 使用 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()
解决方案
推荐阅读
- python - while 循环永远不会结束,我不知道如何停止它
- reactjs - 我不断收到错误:找不到模块'webpack-CLI/bin/config-yargs'
- loops - void函数内的if循环不起作用
- python - Python 3.6 EOF 错误并使用 xargs 并行化脚本
- c - 关于递归函数
- java - 如果使用android studio在firebase中缺少孩子,如何设置错误消息
- c# - C#/F# 互操作性:不能在 F# 代码中使用 C# 类型
- javascript - 不和谐.js | 在用户接收其他角色时分配特定角色
- android - “MediaStore.Images.Media.EXTERNAL_CONTENT_URI”有什么作用?
- node.js - node js express mongoose api保存操作不起作用