public void Destroy_ShouldProduceDesiredResults() { // Arrange. var leafNodeOne = new TestTreeNode(1); var leafNodeTwo = new TestTreeNode(2); var leafNodeThree = new TestTreeNode(3); var leafNodeFour = new TestTreeNode(4); var leafNodeFive = new TestTreeNode(5); var targetNode = new TestTreeNode(9, new TestTreeNode[] { leafNodeOne, new TestTreeNode(12, new TestTreeNode[] { leafNodeFive }) }); var rootNode = new TestTreeNode(6, new TestTreeNode[] { new TestTreeNode(7, new TestTreeNode[] { targetNode }), new TestTreeNode(8, new TestTreeNode[] { new TestTreeNode(10, new TestTreeNode[] { leafNodeTwo }), new TestTreeNode(11, new TestTreeNode[] { leafNodeThree, leafNodeFour }) }) }); // Act. targetNode.Destroy(); // Assert. targetNode.Value.Should().Be(0); targetNode.Parent.Should().BeNull(); targetNode.Children.Count().Should().Be(0); rootNode.Children.First().IsLeaf.Should().BeTrue(); }