code: def test_database_update_ex_if_database_not_exist(self, mock_hook):
      mock_hook.return_value.get_database.return_value = None
      with pytest.raises(AirflowException) as ctx:
          op = SpannerUpdateDatabaseInstanceOperator(
              project_id=PROJECT_ID,
              instance_id=INSTANCE_ID,
              database_id=DB_ID,
              ddl_statements=DDL_STATEMENTS,
              task_id="id",
          )
          op.execute(None)
      err = ctx.value
      assert (
          "The Cloud Spanner database 'db1' in project 'project-id' and "
          "instance 'instance-id' is missing" in str(err)
      )
      mock_hook.assert_called_once_with(
          gcp_conn_id="google_cloud_default",
          impersonation_chain=None,
      )
  
imports: from __future__ import annotations
  from unittest import mock
  import pytest
  from airflow.exceptions import AirflowException
  from airflow.providers.google.cloud.operators.spanner import SpannerDeleteDatabaseInstanceOperator, SpannerDeleteInstanceOperator, SpannerDeployDatabaseInstanceOperator, SpannerDeployInstanceOperator, SpannerQueryDatabaseInstanceOperator, SpannerUpdateDatabaseInstanceOperator
label_desc: Use image node_id 23 for calling the TestCloudSpanner obj's underlying member method code with example usage: obj.test_database_update_ex_if_database_not_exist(mock_hook) without return types