code: def testPipelineConstruction(self, resolve_mock):
      # Avoid actually performing user module packaging because relative path is
      # not valid with respect to temporary directory.
      resolve_mock.side_effect = lambda pipeline_root: None
  
      logical_pipeline = penguin_pipeline_sklearn_gcp._create_pipeline(
          pipeline_name=self._pipeline_name,
          pipeline_root=self._pipeline_root,
          data_root=self._data_root,
          trainer_module_file=self._trainer_module_file,
          evaluator_module_file=self._evaluator_module_file,
          ai_platform_training_args=self._ai_platform_training_args,
          ai_platform_serving_args=self._ai_platform_serving_args,
          beam_pipeline_args=[],
      )
      self.assertEqual(8, len(logical_pipeline.components))
  
      tfx.orchestration.experimental.KubeflowDagRunner().run(
          logical_pipeline
      )
      file_path = os.path.join(self.tmp_dir, "sklearn_test.tar.gz")
      self.assertTrue(tfx.dsl.io.fileio.exists(file_path))
  
file_path: tfx/tfx/examples/penguin/experimental/penguin_pipeline_sklearn_gcp_test.py
imports: import os
  from unittest import mock
  import tensorflow
  from tfx import v1
  from tfx.examples.penguin.experimental import penguin_pipeline_sklearn_gcp
  from tfx.utils import test_case_utils
label_desc: Use image node_id 2 for calling the PenguinPipelineSklearnGcpTest obj's underlying member method code with example usage: obj.testPipelineConstruction(resolve_mock) without return types