code: def test_spanner_client_creation(self, mock_client, mock_get_creds):
      result = self.spanner_hook_no_default_project_id._get_client(
          GCP_PROJECT_ID_HOOK_UNIT_TEST
      )
      mock_client.assert_called_once_with(
          project=GCP_PROJECT_ID_HOOK_UNIT_TEST,
          credentials=mock_get_creds.return_value,
          client_info=CLIENT_INFO,
      )
      assert mock_client.return_value == result
      assert self.spanner_hook_no_default_project_id._client == result
  
imports: from __future__ import annotations
  from unittest import mock
  from unittest.mock import MagicMock, PropertyMock
  import pytest
  import sqlalchemy
  from airflow.providers.google.cloud.hooks.spanner import SpannerHook
  from airflow.providers.google.common.consts import CLIENT_INFO
  from tests.providers.google.cloud.utils.base_gcp_mock import GCP_PROJECT_ID_HOOK_UNIT_TEST, mock_base_gcp_hook_default_project_id, mock_base_gcp_hook_no_default_project_id
label_desc: Use image node_id 2 for calling the TestGcpSpannerHookNoDefaultProjectID obj's underlying member method code with example usage: obj.test_spanner_client_creation(mock_client, mock_get_creds) without return types