code: def testDeserialize(self, *unused_mocks):
      original = _MyArtifact()
      original.uri = "/my/path"
      original.int1 = 111
      original.int2 = 222
      original.proto1 = struct_pb2.Value(string_value="abc")
      original.proto2 = struct_pb2.Value(string_value="xyz")
      original.string1 = "111"
      original.string2 = "222"
  
      serialized = original.to_json_dict()
  
      rehydrated = artifact.Artifact.from_json_dict(serialized)
      logging.warning.assert_not_called()
      self.assertIs(rehydrated.__class__, _MyArtifact)
      self.assertEqual(rehydrated.int1, 111)
      self.assertEqual(rehydrated.int2, 222)
      self.assertProtoEquals(
          rehydrated.proto1, struct_pb2.Value(string_value="abc")
      )
      self.assertProtoEquals(
          rehydrated.proto2, struct_pb2.Value(string_value="xyz")
      )
      self.assertEqual(rehydrated.string1, "111")
      self.assertEqual(rehydrated.string2, "222")
  
imports: import json
  import textwrap
  from unittest import mock
  from absl import logging
  import tensorflow
  from tfx.types import artifact
  from tfx.types import system_artifacts
  from tfx.types import value_artifact
  from tfx.utils import json_utils
  from google.protobuf import struct_pb2
  from google.protobuf import json_format
  from ml_metadata.proto import metadata_store_pb2
label_desc: Use image node_id 8 for calling the ArtifactTest obj's underlying member method code with example usage: obj.testDeserialize() without return types