code: def test_run_pipeline(self, get_conn_mock, mock_project_id):
      with pytest.raises(AirflowException) as ctx:
          self.hook.run_pipeline(body={}, location=TEST_LOCATION)
  
      assert (
          "The project id must be passed either as keyword project_id parameter or as project_id extra in "
          "Google Cloud connection definition. Both are not set!"
          == str(ctx.value)
      )
  
imports: from __future__ import annotations
  from unittest import mock
  from unittest.mock import PropertyMock
  import pytest
  from airflow.exceptions import AirflowException
  from airflow.providers.google.cloud.hooks.life_sciences import LifeSciencesHook
  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 3 for calling the TestLifeSciencesHookWithoutProjectId obj's underlying member method code with example usage: obj.test_run_pipeline(get_conn_mock, mock_project_id) without return types