diff --git a/tests/test__default.py b/tests/test__default.py
index 3c87b35..0665efa 100644
--- a/tests/test__default.py
+++ b/tests/test__default.py
@@ -21,6 +21,7 @@
 from google.auth import _default
 from google.auth import app_engine
 from google.auth import compute_engine
+from google.auth import credentials
 from google.auth import environment_vars
 from google.auth import exceptions
 from google.oauth2 import service_account
@@ -48,9 +49,12 @@
 with open(SERVICE_ACCOUNT_FILE) as fh:
     SERVICE_ACCOUNT_FILE_DATA = json.load(fh)
 
+MOCK_CREDENTIALS = mock.Mock(spec=credentials.Credentials)
+MOCK_CREDENTIALS.with_quota_project.return_value = MOCK_CREDENTIALS
+
 LOAD_FILE_PATCH = mock.patch(
     "google.auth._default.load_credentials_from_file",
-    return_value=(mock.sentinel.credentials, mock.sentinel.project_id),
+    return_value=(MOCK_CREDENTIALS, mock.sentinel.project_id),
     autospec=True,
 )
 
@@ -136,6 +140,16 @@
     assert credentials.scopes == ["https://www.google.com/calendar/feeds"]
 
 
+def test_load_credentials_from_file_authorized_user_cloud_sdk_with_quota_project():
+    credentials, project_id = _default.load_credentials_from_file(
+        AUTHORIZED_USER_CLOUD_SDK_FILE, quota_project_id="project-foo"
+    )
+
+    assert isinstance(credentials, google.oauth2.credentials.Credentials)
+    assert project_id is None
+    assert credentials.quota_project_id == "project-foo"
+
+
 def test_load_credentials_from_file_service_account():
     credentials, project_id = _default.load_credentials_from_file(SERVICE_ACCOUNT_FILE)
     assert isinstance(credentials, service_account.Credentials)
@@ -173,19 +187,19 @@
 
     credentials, project_id = _default._get_explicit_environ_credentials()
 
-    assert credentials is mock.sentinel.credentials
+    assert credentials is MOCK_CREDENTIALS
     assert project_id is mock.sentinel.project_id
     load.assert_called_with("filename")
 
 
 @LOAD_FILE_PATCH
 def test__get_explicit_environ_credentials_no_project_id(load, monkeypatch):
-    load.return_value = mock.sentinel.credentials, None
+    load.return_value = MOCK_CREDENTIALS, None
     monkeypatch.setenv(environment_vars.CREDENTIALS, "filename")
 
     credentials, project_id = _default._get_explicit_environ_credentials()
 
-    assert credentials is mock.sentinel.credentials
+    assert credentials is MOCK_CREDENTIALS
     assert project_id is None
 
 
@@ -198,7 +212,7 @@
 
     credentials, project_id = _default._get_gcloud_sdk_credentials()
 
-    assert credentials is mock.sentinel.credentials
+    assert credentials is MOCK_CREDENTIALS
     assert project_id is mock.sentinel.project_id
     load.assert_called_with(SERVICE_ACCOUNT_FILE)
 
@@ -226,11 +240,11 @@
 def test__get_gcloud_sdk_credentials_project_id(load, unused_isfile, get_project_id):
     # Don't return a project ID from load file, make the function check
     # the Cloud SDK project.
-    load.return_value = mock.sentinel.credentials, None
+    load.return_value = MOCK_CREDENTIALS, None
 
     credentials, project_id = _default._get_gcloud_sdk_credentials()
 
-    assert credentials == mock.sentinel.credentials
+    assert credentials == MOCK_CREDENTIALS
     assert project_id == mock.sentinel.project_id
     assert get_project_id.called
 
@@ -241,11 +255,11 @@
 def test__get_gcloud_sdk_credentials_no_project_id(load, unused_isfile, get_project_id):
     # Don't return a project ID from load file, make the function check
     # the Cloud SDK project.
-    load.return_value = mock.sentinel.credentials, None
+    load.return_value = MOCK_CREDENTIALS, None
 
     credentials, project_id = _default._get_gcloud_sdk_credentials()
 
-    assert credentials == mock.sentinel.credentials
+    assert credentials == MOCK_CREDENTIALS
     assert project_id is None
     assert get_project_id.called
 
@@ -351,58 +365,58 @@
 
 @mock.patch(
     "google.auth._default._get_explicit_environ_credentials",
-    return_value=(mock.sentinel.credentials, mock.sentinel.project_id),
+    return_value=(MOCK_CREDENTIALS, mock.sentinel.project_id),
     autospec=True,
 )
 def test_default_early_out(unused_get):
-    assert _default.default() == (mock.sentinel.credentials, mock.sentinel.project_id)
+    assert _default.default() == (MOCK_CREDENTIALS, mock.sentinel.project_id)
 
 
 @mock.patch(
     "google.auth._default._get_explicit_environ_credentials",
-    return_value=(mock.sentinel.credentials, mock.sentinel.project_id),
+    return_value=(MOCK_CREDENTIALS, mock.sentinel.project_id),
     autospec=True,
 )
 def test_default_explict_project_id(unused_get, monkeypatch):
     monkeypatch.setenv(environment_vars.PROJECT, "explicit-env")
-    assert _default.default() == (mock.sentinel.credentials, "explicit-env")
+    assert _default.default() == (MOCK_CREDENTIALS, "explicit-env")
 
 
 @mock.patch(
     "google.auth._default._get_explicit_environ_credentials",
-    return_value=(mock.sentinel.credentials, mock.sentinel.project_id),
+    return_value=(MOCK_CREDENTIALS, mock.sentinel.project_id),
     autospec=True,
 )
 def test_default_explict_legacy_project_id(unused_get, monkeypatch):
     monkeypatch.setenv(environment_vars.LEGACY_PROJECT, "explicit-env")
-    assert _default.default() == (mock.sentinel.credentials, "explicit-env")
+    assert _default.default() == (MOCK_CREDENTIALS, "explicit-env")
 
 
 @mock.patch("logging.Logger.warning", autospec=True)
 @mock.patch(
     "google.auth._default._get_explicit_environ_credentials",
-    return_value=(mock.sentinel.credentials, None),
+    return_value=(MOCK_CREDENTIALS, None),
     autospec=True,
 )
 @mock.patch(
     "google.auth._default._get_gcloud_sdk_credentials",
-    return_value=(mock.sentinel.credentials, None),
+    return_value=(MOCK_CREDENTIALS, None),
     autospec=True,
 )
 @mock.patch(
     "google.auth._default._get_gae_credentials",
-    return_value=(mock.sentinel.credentials, None),
+    return_value=(MOCK_CREDENTIALS, None),
     autospec=True,
 )
 @mock.patch(
     "google.auth._default._get_gce_credentials",
-    return_value=(mock.sentinel.credentials, None),
+    return_value=(MOCK_CREDENTIALS, None),
     autospec=True,
 )
 def test_default_without_project_id(
     unused_gce, unused_gae, unused_sdk, unused_explicit, logger_warning
 ):
-    assert _default.default() == (mock.sentinel.credentials, None)
+    assert _default.default() == (MOCK_CREDENTIALS, None)
     logger_warning.assert_called_with(mock.ANY, mock.ANY, mock.ANY)
 
 
@@ -433,10 +447,14 @@
 
 @mock.patch(
     "google.auth._default._get_explicit_environ_credentials",
-    return_value=(mock.sentinel.credentials, mock.sentinel.project_id),
+    return_value=(MOCK_CREDENTIALS, mock.sentinel.project_id),
     autospec=True,
 )
-@mock.patch("google.auth.credentials.with_scopes_if_required", autospec=True)
+@mock.patch(
+    "google.auth.credentials.with_scopes_if_required",
+    return_value=MOCK_CREDENTIALS,
+    autospec=True,
+)
 def test_default_scoped(with_scopes, unused_get):
     scopes = ["one", "two"]
 
@@ -444,12 +462,12 @@
 
     assert credentials == with_scopes.return_value
     assert project_id == mock.sentinel.project_id
-    with_scopes.assert_called_once_with(mock.sentinel.credentials, scopes)
+    with_scopes.assert_called_once_with(MOCK_CREDENTIALS, scopes)
 
 
 @mock.patch(
     "google.auth._default._get_explicit_environ_credentials",
-    return_value=(mock.sentinel.credentials, mock.sentinel.project_id),
+    return_value=(MOCK_CREDENTIALS, mock.sentinel.project_id),
     autospec=True,
 )
 def test_default_no_app_engine_compute_engine_module(unused_get):
@@ -463,7 +481,4 @@
     with mock.patch.dict("sys.modules"):
         sys.modules["google.auth.compute_engine"] = None
         sys.modules["google.auth.app_engine"] = None
-        assert _default.default() == (
-            mock.sentinel.credentials,
-            mock.sentinel.project_id,
-        )
+        assert _default.default() == (MOCK_CREDENTIALS, mock.sentinel.project_id)
