code: def testUnwrapDictKey(self):
      @resolver_function.resolver_function(
          output_type={"x": X}, unwrap_dict_key="x"
      )
      def resolve():
          return DummyNode(
              output_data_type=resolver_op.DataType.ARTIFACT_MULTIMAP_LIST
          )
  
      with for_each.ForEach(resolve()) as each_x:
          self.assertIsInstance(
              each_x, resolved_channel.ResolvedChannel
          )
          self.assertEqual(
              each_x.invocation.function.__name__, "resolve"
          )
          self.assertEqual(each_x.type, X)
  
      @resolver_function.resolver_function(
          output_type={"x1": X, "x2": X}, unwrap_dict_key=["x1", "x2"]
      )
      def resolve2():
          return DummyNode(
              output_data_type=resolver_op.DataType.ARTIFACT_MULTIMAP_LIST
          )
  
      with for_each.ForEach(resolve2()) as (x1, x2):
          self.assertIsInstance(x1, resolved_channel.ResolvedChannel)
          self.assertIsInstance(x2, resolved_channel.ResolvedChannel)
          self.assertEqual(x1.invocation.function.__name__, "resolve2")
          self.assertEqual(x2.invocation.function.__name__, "resolve2")
          self.assertEqual(x1.type, X)
          self.assertEqual(x2.type, X)
          self.assertEqual(x1.output_key, "x1")
          self.assertEqual(x2.output_key, "x2")
  
imports: from typing import Mapping, Set
  import tensorflow
  from tfx.dsl.control_flow import for_each
  from tfx.dsl.control_flow import for_each_internal
  from tfx.dsl.input_resolution import resolver_function
  from tfx.dsl.input_resolution import resolver_op
  import tfx.types
  from tfx.types import resolved_channel
  from tfx.utils import typing_utils
label_desc: Use image node_id 12 for calling the ResolverFunctionTest obj's underlying member method code with example usage: obj.testUnwrapDictKey() and returns: DummyNode, DummyNode