public void TestDeepCloningObjectWithCircularReferences() { TestClass parent = new TestClass { Name = "Parent" }; parent.AddChild(new TestClass { Name = "Child #1" }); parent.AddChild(new TestClass { Name = "Child #2" }); TestClass clone = DeepCloner.DeepClone(parent); Assert.AreNotSame(parent, clone); Assert.AreEqual(parent.Name, clone.Name); Assert.IsNull(clone.Parent); Assert.AreNotSame(parent.Children, clone.Children); TestClass[] originalChildren = parent.Children.ToArray(); TestClass[] cloneChildren = clone.Children.ToArray(); Assert.AreEqual(originalChildren.Length, cloneChildren.Length); for (int i = 0; i < originalChildren.Length; i++) { Assert.AreNotSame(originalChildren[i], cloneChildren[i]); Assert.AreEqual(originalChildren[i].Name, cloneChildren[i].Name); Assert.AreSame(clone, cloneChildren[i].Parent); } }