code: def test_empty_attribute(
      self, mock_hook, missing_attribute, project_id, instance_id
  ):
      with pytest.raises(AirflowException) as ctx:
          BigtableUpdateInstanceOperator(
              project_id=project_id,
              instance_id=instance_id,
              instance_display_name=INSTANCE_DISPLAY_NAME,
              instance_type=INSTANCE_TYPE,
              instance_labels=INSTANCE_LABELS,
              task_id="id",
          )
      err = ctx.value
      assert str(err) == f"Empty parameter: {missing_attribute}"
      mock_hook.assert_not_called()
  
imports: from __future__ import annotations
  from unittest import mock
  import google.api_core.exceptions
  import pytest
  from google.cloud.bigtable import enums
  from google.cloud.bigtable.column_family import MaxVersionsGCRule
  from google.cloud.bigtable.instance import Instance
  from airflow.exceptions import AirflowException
  from airflow.providers.google.cloud.operators.bigtable import BigtableCreateInstanceOperator, BigtableCreateTableOperator, BigtableDeleteInstanceOperator, BigtableDeleteTableOperator, BigtableUpdateClusterOperator, BigtableUpdateInstanceOperator
label_desc: Use image node_id 3 for calling the TestBigtableInstanceUpdate obj's underlying member method code with example usage: obj.test_empty_attribute(mock_hook, missing_attribute, project_id, instance_id) without return types