public void Test_ComposedPerson_Equals_with_ExpectedObjects()
        {
            var expected = new Person
            {
                Id = 1,
                Name = "A",
                Age = 10,
                Order = new Order
                {
                    Id = 91,
                    Price = 910
                }
            }.ToExpectedObject();

            var actual = new Person
            {
                Id = 1,
                Name = "A",
                Age = 10,
                Order = new Order
                {
                    Id = 91,
                    Price = 910
                }
            };

            expected.ShouldEqual(actual);
        }
        public void Test_Person_Equals_with_ExpectedObjects()
        {
            var expected = new Person
            {
                Id = 1,
                Name = "A",
                Age = 10,
            }.ToExpectedObject();

            var actual = new Person
            {
                Id = 1,
                Name = "A",
                Age = 10,
            };

            expected.ShouldEqual(actual);
        }
        public void Test_Person_Equals_with_AnonymousType()
        {
            var expected = new Person
            {
                Id = 1,
                Name = "A",
                Age = 10,
            };

            var actual = new Person
            {
                Id = 1,
                Name = "A",
                Age = 10,
            };

            //project expected Person to anonymous type
            var expectedAnonymous = new
            {
                Id = expected.Id,
                Name = expected.Name,
                Age = expected.Age
            };

            //project actual Person to anonymous type
            var actualAnonymous = new
            {
                Id = actual.Id,
                Name = actual.Name,
                Age = actual.Age,
            };

            Assert.AreEqual(expectedAnonymous, actualAnonymous);
        }
        public void Test_Person_Equals_Flat_all_properties_by_Assert_Equals()
        {
            var expected = new Person
            {
                Id = 1,
                Name = "A",
                Age = 10,
            };

            var actual = new Person
            {
                Id = 1,
                Name = "A",
                Age = 10,
            };

            Assert.AreEqual(expected.Id, actual.Id);
            Assert.AreEqual(expected.Name, actual.Name);
            Assert.AreEqual(expected.Age, actual.Age);
        }
        public void Test_PartialCompare_Person_Equals_with_ExpectedObjects()
        {
            var expected = new
            {
                Id = 1,
                Age = 10,
                Order = new
                {
                    Id = 91
                }
            }.ToExpectedObject();

            var actual = new Person
            {
                Id = 1,
                Name = "B",
                Age = 10,
                Order = new Order
                {
                    Id = 91,
                    Price = 910
                }
            };

            expected.ShouldMatch(actual);
        }