diff --git a/tools/gn/xcode_object_unittest.cc b/tools/gn/xcode_object_unittest.cc
index 512f552..4e04946 100644
--- a/tools/gn/xcode_object_unittest.cc
+++ b/tools/gn/xcode_object_unittest.cc
@@ -7,88 +7,319 @@
 #include "base/memory/ptr_util.h"
 #include "testing/gtest/include/gtest/gtest.h"
 
+namespace {
+
+// Instantiate a PBXSourcesBuildPhase object.
+std::unique_ptr<PBXSourcesBuildPhase> GetPBXSourcesBuildPhaseObject() {
+  std::unique_ptr<PBXSourcesBuildPhase> pbx_sources_build_phase(
+      new PBXSourcesBuildPhase());
+  return pbx_sources_build_phase;
+}
+
+// Instantiate a PBXFrameworksBuildPhase object.
+std::unique_ptr<PBXFrameworksBuildPhase> GetPBXFrameworksBuildPhaseObject() {
+  std::unique_ptr<PBXFrameworksBuildPhase> pbx_frameworks_build_phase(
+      new PBXFrameworksBuildPhase());
+  return pbx_frameworks_build_phase;
+}
+
+// Instantiate a PBXShellScriptBuildPhase object with arbitrary names.
+std::unique_ptr<PBXShellScriptBuildPhase> GetPBXShellScriptBuildPhaseObject() {
+  std::unique_ptr<PBXShellScriptBuildPhase> pbx_shell_script_build_phase(
+      new PBXShellScriptBuildPhase("name", "shell_script"));
+  return pbx_shell_script_build_phase;
+}
+
+// Instantiate a PBXGroup object with arbitrary names.
+std::unique_ptr<PBXGroup> GetPBXGroupObject() {
+  std::unique_ptr<PBXGroup> pbx_group(new PBXGroup("/dir1/dir2", "group"));
+  return pbx_group;
+}
+
+// Instantiate a PBXProject object with arbitrary names.
+std::unique_ptr<PBXProject> GetPBXProjectObject() {
+  std::unique_ptr<PBXProject> pbx_project(
+      new PBXProject("project", "config", "out/build", PBXAttributes()));
+  return pbx_project;
+}
+
+// Instantiate a PBXFileReference object with arbitrary names.
+std::unique_ptr<PBXFileReference> GetPBXFileReferenceObject() {
+  std::unique_ptr<PBXFileReference> pbx_file_reference(new PBXFileReference(
+      "product.app", "product.app", "wrapper.application"));
+  return pbx_file_reference;
+}
+
+// Instantiate a PBXBuildFile object.
+std::unique_ptr<PBXBuildFile> GetPBXBuildFileObject(
+    const PBXFileReference* file_reference,
+    const PBXSourcesBuildPhase* build_phase) {
+  std::unique_ptr<PBXBuildFile> pbx_build_file(
+      new PBXBuildFile(file_reference, build_phase, CompilerFlags::NONE));
+  return pbx_build_file;
+}
+
+// Instantiate a PBXAggregateTarget object with arbitrary names.
+std::unique_ptr<PBXAggregateTarget> GetPBXAggregateTargetObject() {
+  std::unique_ptr<PBXAggregateTarget> pbx_aggregate_target(
+      new PBXAggregateTarget("target_name", "shell_script", "config_name",
+                             PBXAttributes()));
+  return pbx_aggregate_target;
+}
+
+// Instantiate a PBXNativeTarget object with arbitrary names.
+std::unique_ptr<PBXNativeTarget> GetPBXNativeTargetObject(
+    const PBXFileReference* product_reference) {
+  std::unique_ptr<PBXNativeTarget> pbx_native_target(new PBXNativeTarget(
+      "target_name", "ninja gn_unittests", "config_name", PBXAttributes(),
+      "com.apple.product-type.application", "product_name", product_reference));
+  return pbx_native_target;
+}
+
+// Instantiate a PBXContainerItemProxy object.
+std::unique_ptr<PBXContainerItemProxy> GetPBXContainerItemProxyObject(
+    const PBXProject* project,
+    const PBXTarget* target) {
+  std::unique_ptr<PBXContainerItemProxy> pbx_container_item_proxy(
+      new PBXContainerItemProxy(project, target));
+  return pbx_container_item_proxy;
+}
+
+// Instantiate a PBXTargetDependency object.
+std::unique_ptr<PBXTargetDependency> GetPBXTargetDependencyObject(
+    const PBXTarget* target,
+    std::unique_ptr<PBXContainerItemProxy> container_item_proxy) {
+  std::unique_ptr<PBXTargetDependency> pbx_target_dependency(
+      new PBXTargetDependency(target, std::move(container_item_proxy)));
+  return pbx_target_dependency;
+}
+
+// Instantiate a XCBuildConfiguration object with arbitrary names.
+std::unique_ptr<XCBuildConfiguration> GetXCBuildConfigurationObject() {
+  std::unique_ptr<XCBuildConfiguration> xc_build_configuration(
+      new XCBuildConfiguration("config_name", PBXAttributes()));
+  return xc_build_configuration;
+}
+
+// Instantiate a XCConfigurationList object with arbitrary names.
+std::unique_ptr<XCConfigurationList> GetXCConfigurationListObject(
+    const PBXObject* owner_reference) {
+  std::unique_ptr<XCConfigurationList> xc_configuration_list(
+      new XCConfigurationList("config_list_name", PBXAttributes(),
+                              owner_reference));
+  return xc_configuration_list;
+}
+
+}  // namespace
+
 // Tests that instantiating Xcode objects doesn't crash.
 TEST(XcodeObject, InstantiatePBXSourcesBuildPhase) {
-  PBXSourcesBuildPhase pbx_sources_build_phase;
+  std::unique_ptr<PBXSourcesBuildPhase> pbx_sources_build_phase =
+      GetPBXSourcesBuildPhaseObject();
 }
 
 TEST(XcodeObject, InstantiatePBXFrameworksBuildPhase) {
-  PBXFrameworksBuildPhase pbx_frameworks_build_phase;
+  std::unique_ptr<PBXFrameworksBuildPhase> pbx_frameworks_build_phase =
+      GetPBXFrameworksBuildPhaseObject();
 }
 
 TEST(XcodeObject, InstantiatePBXShellScriptBuildPhase) {
-  PBXShellScriptBuildPhase pbx_shell_script_build_phase("name", "shell_script");
+  std::unique_ptr<PBXShellScriptBuildPhase> pbx_shell_script_build_phase =
+      GetPBXShellScriptBuildPhaseObject();
 }
 
 TEST(XcodeObject, InstantiatePBXGroup) {
-  PBXGroup pbx_group("/dir1/dir2", "group");
+  std::unique_ptr<PBXGroup> pbx_group = GetPBXGroupObject();
 }
 
 TEST(XcodeObject, InstantiatePBXProject) {
-  PBXProject pbx_project("project", "config", "out/build", PBXAttributes());
+  std::unique_ptr<PBXProject> pbx_project = GetPBXProjectObject();
 }
 
 TEST(XcodeObject, InstantiatePBXFileReference) {
-  PBXFileReference pbx_file_reference("test.cc", "sources/tools/test.cc",
-                                      "sourcecode.cpp.cpp");
+  std::unique_ptr<PBXFileReference> pbx_file_reference =
+      GetPBXFileReferenceObject();
 }
 
 TEST(XcodeObject, InstantiatePBXBuildFile) {
-  PBXFileReference pbx_file_reference("test.cc", "sources/tools/test.cc",
-                                      "sourcecode.cpp.cpp");
-  PBXSourcesBuildPhase pbx_sources_build_phase;
-  PBXBuildFile pbx_build_file(&pbx_file_reference, &pbx_sources_build_phase,
-                              CompilerFlags::NONE);
+  std::unique_ptr<PBXFileReference> pbx_file_reference =
+      GetPBXFileReferenceObject();
+  std::unique_ptr<PBXSourcesBuildPhase> pbx_sources_build_phase =
+      GetPBXSourcesBuildPhaseObject();
+  std::unique_ptr<PBXBuildFile> pbx_build_file = GetPBXBuildFileObject(
+      pbx_file_reference.get(), pbx_sources_build_phase.get());
 }
 
 TEST(XcodeObject, InstantiatePBXAggregateTarget) {
-  PBXAggregateTarget pbx_aggregate_target("target_name", "shell_script",
-                                          "config_name", PBXAttributes());
+  std::unique_ptr<PBXAggregateTarget> pbx_aggregate_target =
+      GetPBXAggregateTargetObject();
 }
 
 TEST(XcodeObject, InstantiatePBXNativeTarget) {
-  PBXFileReference product_reference("product.app", "product.app",
-                                     "wrapper.application");
-  PBXNativeTarget pbx_native_target(
-      "target_name", "ninja gn_unittests", "config_name", PBXAttributes(),
-      "com.apple.product-type.application", "product_name", &product_reference);
+  std::unique_ptr<PBXFileReference> product_reference =
+      GetPBXFileReferenceObject();
+  std::unique_ptr<PBXNativeTarget> pbx_native_target =
+      GetPBXNativeTargetObject(product_reference.get());
 }
 
 TEST(XcodeObject, InstantiatePBXContainerItemProxy) {
-  PBXProject pbx_project("project_name", "config_name", "out/build",
-                         PBXAttributes());
-  PBXFileReference product_reference("product.app", "product.app",
-                                     "wrapper.application");
-  PBXNativeTarget pbx_native_target(
-      "target_name", "ninja gn_unittests", "config_name", PBXAttributes(),
-      "com.apple.product-type.application", "product_name", &product_reference);
-  PBXContainerItemProxy pbx_container_item_proxy(&pbx_project,
-                                                 &pbx_native_target);
+  std::unique_ptr<PBXFileReference> product_reference =
+      GetPBXFileReferenceObject();
+  std::unique_ptr<PBXNativeTarget> pbx_native_target =
+      GetPBXNativeTargetObject(product_reference.get());
+  std::unique_ptr<PBXProject> pbx_project = GetPBXProjectObject();
+  std::unique_ptr<PBXContainerItemProxy> pbx_container_item_proxy =
+      GetPBXContainerItemProxyObject(pbx_project.get(),
+                                     pbx_native_target.get());
 }
 
 TEST(XcodeObject, InstantiatePBXTargetDependency) {
-  PBXProject pbx_project("project_name", "config_name", "out/build",
-                         PBXAttributes());
-  PBXFileReference product_reference("product.app", "product.app",
-                                     "wrapper.application");
-  PBXNativeTarget pbx_native_target(
-      "target_name", "ninja gn_unittests", "config_name", PBXAttributes(),
-      "com.apple.product-type.application", "product_name", &product_reference);
-  PBXTargetDependency pbx_target_dependency(
-      &pbx_native_target, base::MakeUnique<PBXContainerItemProxy>(
-                              &pbx_project, &pbx_native_target));
+  std::unique_ptr<PBXFileReference> product_reference =
+      GetPBXFileReferenceObject();
+  std::unique_ptr<PBXProject> pbx_project = GetPBXProjectObject();
+  std::unique_ptr<PBXNativeTarget> pbx_native_target =
+      GetPBXNativeTargetObject(product_reference.get());
+  std::unique_ptr<PBXContainerItemProxy> pbx_container_item_proxy =
+      GetPBXContainerItemProxyObject(pbx_project.get(),
+                                     pbx_native_target.get());
+  std::unique_ptr<PBXTargetDependency> pbx_target_dependency =
+      GetPBXTargetDependencyObject(pbx_native_target.get(),
+                                   std::move(pbx_container_item_proxy));
 }
 
 TEST(XcodeObject, InstantiateXCBuildConfiguration) {
-  XCBuildConfiguration xc_build_configuration("config_name", PBXAttributes());
+  std::unique_ptr<XCBuildConfiguration> xc_build_configuration =
+      GetXCBuildConfigurationObject();
 }
 
 TEST(XcodeObject, InstantiateXCConfigurationList) {
-  PBXFileReference product_reference("product.app", "product.app",
-                                     "wrapper.application");
-  PBXNativeTarget pbx_native_target(
-      "target_name", "ninja gn_unittests", "config_name", PBXAttributes(),
-      "com.apple.product-type.application", "product_name", &product_reference);
-  XCConfigurationList xc_xcconfiguration_list(
-      "config_list_name", PBXAttributes(), &pbx_native_target);
+  std::unique_ptr<PBXFileReference> product_reference =
+      GetPBXFileReferenceObject();
+  std::unique_ptr<PBXNativeTarget> pbx_native_target =
+      GetPBXNativeTargetObject(product_reference.get());
+  std::unique_ptr<XCConfigurationList> xc_configuration_list =
+      GetXCConfigurationListObject(pbx_native_target.get());
+}
+
+// Tests that the mapping between PBXObject and PBXObjectClass.
+TEST(XcodeObject, PBXSourcesBuildPhaseObjectToClass) {
+  std::unique_ptr<PBXSourcesBuildPhase> pbx_sources_build_phase =
+      GetPBXSourcesBuildPhaseObject();
+  EXPECT_EQ(PBXSourcesBuildPhaseClass, pbx_sources_build_phase->Class());
+}
+
+TEST(XcodeObject, PBXFrameworksBuildPhaseObjectToClass) {
+  std::unique_ptr<PBXFrameworksBuildPhase> pbx_frameworks_build_phase =
+      GetPBXFrameworksBuildPhaseObject();
+  EXPECT_EQ(PBXFrameworksBuildPhaseClass, pbx_frameworks_build_phase->Class());
+}
+
+TEST(XcodeObject, PBXShellScriptBuildPhaseObjectToClass) {
+  std::unique_ptr<PBXShellScriptBuildPhase> pbx_shell_script_build_phase =
+      GetPBXShellScriptBuildPhaseObject();
+  EXPECT_EQ(PBXShellScriptBuildPhaseClass,
+            pbx_shell_script_build_phase->Class());
+}
+
+TEST(XcodeObject, PBXGroupObjectToClass) {
+  std::unique_ptr<PBXGroup> pbx_group = GetPBXGroupObject();
+  EXPECT_EQ(PBXGroupClass, pbx_group->Class());
+}
+
+TEST(XcodeObject, PBXProjectObjectToClass) {
+  std::unique_ptr<PBXProject> pbx_project = GetPBXProjectObject();
+  EXPECT_EQ(PBXProjectClass, pbx_project->Class());
+}
+
+TEST(XcodeObject, PBXFileReferenceObjectToClass) {
+  std::unique_ptr<PBXFileReference> pbx_file_reference =
+      GetPBXFileReferenceObject();
+  EXPECT_EQ(PBXFileReferenceClass, pbx_file_reference->Class());
+}
+
+TEST(XcodeObject, PBXBuildFileObjectToClass) {
+  std::unique_ptr<PBXFileReference> pbx_file_reference =
+      GetPBXFileReferenceObject();
+  std::unique_ptr<PBXSourcesBuildPhase> pbx_sources_build_phase =
+      GetPBXSourcesBuildPhaseObject();
+  std::unique_ptr<PBXBuildFile> pbx_build_file = GetPBXBuildFileObject(
+      pbx_file_reference.get(), pbx_sources_build_phase.get());
+  EXPECT_EQ(PBXBuildFileClass, pbx_build_file->Class());
+}
+
+TEST(XcodeObject, PBXAggregateTargetObjectToClass) {
+  std::unique_ptr<PBXAggregateTarget> pbx_aggregate_target =
+      GetPBXAggregateTargetObject();
+  EXPECT_EQ(PBXAggregateTargetClass, pbx_aggregate_target->Class());
+}
+
+TEST(XcodeObject, PBXNativeTargetObjectToClass) {
+  std::unique_ptr<PBXFileReference> product_reference =
+      GetPBXFileReferenceObject();
+  std::unique_ptr<PBXNativeTarget> pbx_native_target =
+      GetPBXNativeTargetObject(product_reference.get());
+  EXPECT_EQ(PBXNativeTargetClass, pbx_native_target->Class());
+}
+
+TEST(XcodeObject, PBXContainerItemProxyObjectToClass) {
+  std::unique_ptr<PBXFileReference> product_reference =
+      GetPBXFileReferenceObject();
+  std::unique_ptr<PBXNativeTarget> pbx_native_target =
+      GetPBXNativeTargetObject(product_reference.get());
+  std::unique_ptr<PBXProject> pbx_project = GetPBXProjectObject();
+  std::unique_ptr<PBXContainerItemProxy> pbx_container_item_proxy =
+      GetPBXContainerItemProxyObject(pbx_project.get(),
+                                     pbx_native_target.get());
+  EXPECT_EQ(PBXContainerItemProxyClass, pbx_container_item_proxy->Class());
+}
+
+TEST(XcodeObject, PBXTargetDependencyObjectToClass) {
+  std::unique_ptr<PBXFileReference> product_reference =
+      GetPBXFileReferenceObject();
+  std::unique_ptr<PBXProject> pbx_project = GetPBXProjectObject();
+  std::unique_ptr<PBXNativeTarget> pbx_native_target =
+      GetPBXNativeTargetObject(product_reference.get());
+  std::unique_ptr<PBXContainerItemProxy> pbx_container_item_proxy =
+      GetPBXContainerItemProxyObject(pbx_project.get(),
+                                     pbx_native_target.get());
+  std::unique_ptr<PBXTargetDependency> pbx_target_dependency =
+      GetPBXTargetDependencyObject(pbx_native_target.get(),
+                                   std::move(pbx_container_item_proxy));
+  EXPECT_EQ(PBXTargetDependencyClass, pbx_target_dependency->Class());
+}
+
+TEST(XcodeObject, XCBuildConfigurationObjectToClass) {
+  std::unique_ptr<XCBuildConfiguration> xc_build_configuration =
+      GetXCBuildConfigurationObject();
+  EXPECT_EQ(XCBuildConfigurationClass, xc_build_configuration->Class());
+}
+
+TEST(XcodeObject, XCConfigurationListObjectToClass) {
+  std::unique_ptr<PBXFileReference> product_reference =
+      GetPBXFileReferenceObject();
+  std::unique_ptr<PBXNativeTarget> pbx_native_target =
+      GetPBXNativeTargetObject(product_reference.get());
+  std::unique_ptr<XCConfigurationList> xc_configuration_list =
+      GetXCConfigurationListObject(pbx_native_target.get());
+  EXPECT_EQ(XCConfigurationListClass, xc_configuration_list->Class());
+}
+
+// Tests the mapping between PBXObjectClass and it's name as a string.
+TEST(XcodeObject, ClassToString) {
+  EXPECT_EQ("PBXAggregateTarget", ToString(PBXAggregateTargetClass));
+  EXPECT_EQ("PBXBuildFile", ToString(PBXBuildFileClass));
+  EXPECT_EQ("PBXAggregateTarget", ToString(PBXAggregateTargetClass));
+  EXPECT_EQ("PBXBuildFile", ToString(PBXBuildFileClass));
+  EXPECT_EQ("PBXContainerItemProxy", ToString(PBXContainerItemProxyClass));
+  EXPECT_EQ("PBXFileReference", ToString(PBXFileReferenceClass));
+  EXPECT_EQ("PBXFrameworksBuildPhase", ToString(PBXFrameworksBuildPhaseClass));
+  EXPECT_EQ("PBXGroup", ToString(PBXGroupClass));
+  EXPECT_EQ("PBXNativeTarget", ToString(PBXNativeTargetClass));
+  EXPECT_EQ("PBXProject", ToString(PBXProjectClass));
+  EXPECT_EQ("PBXSourcesBuildPhase", ToString(PBXSourcesBuildPhaseClass));
+  EXPECT_EQ("PBXTargetDependency", ToString(PBXTargetDependencyClass));
+  EXPECT_EQ("XCBuildConfiguration", ToString(XCBuildConfigurationClass));
+  EXPECT_EQ("XCConfigurationList", ToString(XCConfigurationListClass));
+  EXPECT_EQ("PBXShellScriptBuildPhase",
+            ToString(PBXShellScriptBuildPhaseClass));
 }
