public void ByFields_CreatesComparerBasedOnAllPropertiesEquality()
        {
            var comparer =
                EqualityComparer.ByFields <DummyByMembersEqualityComparable>();

            comparer.Should()
            .HandleBasicEqualitiesAndInequalites()
            .And.ValidateEqualityOf(
                new DummyByMembersEqualityComparable(
                    5, new[] { 'a', 'b' }, new DateTime(2018, 07, 30), new[] { true, true }),
                new DummyByMembersEqualityComparable(
                    5, new[] { 'a', 'b' }, new DateTime(2018, 06, 24), new[] { false, false }),
                "properties should be ignored")
            .And.InvalidateEqualityOf(
                new DummyByMembersEqualityComparable(
                    5, new[] { 'a', 'b' }, new DateTime(2018, 07, 30), new[] { true, true }),
                new DummyByMembersEqualityComparable(
                    5, new[] { 'c', 'd' }, new DateTime(2018, 07, 30), new[] { true, true }),
                "objects with different fields shouldn't equals");
        }
        public void ByFields_WithSelector_CreatesComparerBasedOnSelectedFieldsEquality()
        {
            var comparer =
                EqualityComparer.ByFields <DummyByMembersEqualityComparable>(
                    fields => fields.Where(field => field.Name.EndsWith("A")));

            comparer.Should()
            .HandleBasicEqualitiesAndInequalites()
            .And.ValidateEqualityOf(
                new DummyByMembersEqualityComparable(
                    5, new[] { 'a', 'b' }, new DateTime(2018, 07, 30), new[] { true, true }),
                new DummyByMembersEqualityComparable(
                    5, new[] { 'c', 'd' }, new DateTime(2018, 06, 24), new[] { false, false }),
                "unselected fields and every property should be ignored")
            .And.InvalidateEqualityOf(
                new DummyByMembersEqualityComparable(
                    5, new[] { 'a', 'b' }, new DateTime(2018, 07, 30), new[] { true, true }),
                new DummyByMembersEqualityComparable(
                    3, new[] { 'a', 'b' }, new DateTime(2018, 06, 24), new[] { true, true }),
                "objects with different selected fields shouldn't equals");
        }