Patching the googleads package for unit testing with pytest
I want to test the ReadAdwords
class method get_keywords
. The code below works but the test throws the following error: AttributeError: Mock object has no attribute 'get'
.
The source code says that GetService()
returns "A googleads.common.GoogleSoapService instance which has the headers and proxy configured for use."
I can't find def get(
anywhere in the source, not just on the soap service instance that is being returned. What's going on here? Is there a way to patch this whilst still using autospec=True
?
The equivalent get
method in the PHP library is here.
The only similar question I have found whilst searching stack overflow is this.
The class:
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)
The test:
@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 pytest google-adwords
add a comment |
I want to test the ReadAdwords
class method get_keywords
. The code below works but the test throws the following error: AttributeError: Mock object has no attribute 'get'
.
The source code says that GetService()
returns "A googleads.common.GoogleSoapService instance which has the headers and proxy configured for use."
I can't find def get(
anywhere in the source, not just on the soap service instance that is being returned. What's going on here? Is there a way to patch this whilst still using autospec=True
?
The equivalent get
method in the PHP library is here.
The only similar question I have found whilst searching stack overflow is this.
The class:
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)
The test:
@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 pytest google-adwords
add a comment |
I want to test the ReadAdwords
class method get_keywords
. The code below works but the test throws the following error: AttributeError: Mock object has no attribute 'get'
.
The source code says that GetService()
returns "A googleads.common.GoogleSoapService instance which has the headers and proxy configured for use."
I can't find def get(
anywhere in the source, not just on the soap service instance that is being returned. What's going on here? Is there a way to patch this whilst still using autospec=True
?
The equivalent get
method in the PHP library is here.
The only similar question I have found whilst searching stack overflow is this.
The class:
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)
The test:
@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 pytest google-adwords
I want to test the ReadAdwords
class method get_keywords
. The code below works but the test throws the following error: AttributeError: Mock object has no attribute 'get'
.
The source code says that GetService()
returns "A googleads.common.GoogleSoapService instance which has the headers and proxy configured for use."
I can't find def get(
anywhere in the source, not just on the soap service instance that is being returned. What's going on here? Is there a way to patch this whilst still using autospec=True
?
The equivalent get
method in the PHP library is here.
The only similar question I have found whilst searching stack overflow is this.
The class:
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)
The test:
@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 pytest google-adwords
python pytest google-adwords
edited Nov 23 '18 at 12:22
Nick Ramsbottom
asked Nov 23 '18 at 11:56
Nick RamsbottomNick Ramsbottom
16812
16812
add a comment |
add a comment |
0
active
oldest
votes
Your Answer
StackExchange.ifUsing("editor", function () {
StackExchange.using("externalEditor", function () {
StackExchange.using("snippets", function () {
StackExchange.snippets.init();
});
});
}, "code-snippets");
StackExchange.ready(function() {
var channelOptions = {
tags: "".split(" "),
id: "1"
};
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function() {
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled) {
StackExchange.using("snippets", function() {
createEditor();
});
}
else {
createEditor();
}
});
function createEditor() {
StackExchange.prepareEditor({
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader: {
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
},
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
});
}
});
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53446281%2fpatching-the-googleads-package-for-unit-testing-with-pytest%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
0
active
oldest
votes
0
active
oldest
votes
active
oldest
votes
active
oldest
votes
Thanks for contributing an answer to Stack Overflow!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53446281%2fpatching-the-googleads-package-for-unit-testing-with-pytest%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown