public void MergeDifferentClassesShallNotOverrideUncommonMembersWithSameName()
        {
            var a = new ClassWithEqualNamedButHiddenMembersA(1, 1);
            var b = new ClassWithEqualNamedButHiddenMembersB(2, 2);

            a.PropertyNotToCopyPublic = 1;
            a.FieldNotToCopyPublic    = 1;
            a.PropertyToCopy          = 1;

            b.PropertyNotToCopyPublic = 2;
            b.FieldNotToCopyPublic    = 2;
            b.PropertyToCopy          = 2;

            var result       = ObjectMerger.ObjectMerger.MergeObjects((IEqualNamedAndHiddenMembersClass)a, b);
            var castedResult = (ClassWithEqualNamedButHiddenMembersA)result;

            Assert.AreEqual(2, result.PropertyToCopy);

            PrivateObject privateObject = new PrivateObject(result);

            Assert.AreEqual(1, privateObject.GetProperty("PropertyNotToCopyPrivate"));
            Assert.AreEqual(1, privateObject.GetProperty("FieldNotToCopyPrivate"));
            Assert.AreEqual(1, castedResult.FieldNotToCopyPublic);
            Assert.AreEqual(1, castedResult.PropertyNotToCopyPublic);
        }
        public void MergeDifferentClassesWithDatatypeParameterWorks()
        {
            var a = new ClassWithEqualNamedButHiddenMembersA(1, 2);
            var b = new ClassWithEqualNamedButHiddenMembersB(5, 6);

            a.PropertyNotToCopyPublic = 3;
            a.FieldNotToCopyPublic    = 4;
            a.PropertyToCopy          = 10;

            b.PropertyNotToCopyPublic = 7;
            b.FieldNotToCopyPublic    = 8;
            b.PropertyToCopy          = 20;

            IEqualNamedAndHiddenMembersClass result = ObjectMerger.ObjectMerger.MergeObjects(a, b);

            Assert.AreEqual(a.GetType(), result.GetType());
            Assert.AreNotEqual(b.GetType(), result.GetType());
        }