public void Compare_Two_Equal_Entites_One_As_SubClass_One_Cast_As_BaseClass_As_Equal()
        {
            // Arrange
            ValueObjectFake2 valueObject1 = new ValueObjectFake2("Ulica 1", "Zagreb", "Croatia");

            ValueObjectFake2 valueObject2 = new ValueObjectFake2("Ulica 1", "Zagreb", "Croatia");
            ValueObjectFake valueObject22 = valueObject2 as ValueObjectFake;

            ValueObjectFake valueObject3 = new ValueObjectFake("Ulica 1", "Zagreb");

            // Act

            // Assert
            Assert.AreEqual(valueObject1, valueObject22, "Two ValueObjects aren't equal.");
            Assert.AreEqual(valueObject1.GetHashCode(), valueObject22.GetHashCode(), "Two ValueObjects haven't the same hashcodes.");
            Assert.AreEqual(typeof(ValueObjectFake2), valueObject1.GetUnproxiedType(), "Types are not equal.");
            Assert.AreEqual(typeof(ValueObjectFake2), valueObject22.GetUnproxiedType(), "Types are not equal.");

            Assert.AreNotEqual(valueObject1, valueObject3, "Two ValueObjects are equal.");
            Assert.AreNotEqual(valueObject1.GetHashCode(), valueObject3.GetHashCode(), "Two ValueObjects have the same hashcodes.");
            Assert.AreEqual(typeof(ValueObjectFake2), valueObject1.GetUnproxiedType(), "Types are not equal.");
            Assert.AreEqual(typeof(ValueObjectFake), valueObject3.GetUnproxiedType(), "Types are not equal.");
        }
        public void Compare_Two_ValueObjects_Of_Diffrent_Type_Of_Hierarchy_As_NotEqual()
        {
            // Arrange
            ValueObject valueObject1 = new ValueObjectFake("Ulica 1", "Zagreb");

            ValueObject valueObject2 = new ValueObjectFake2("Ulica 1", "Zagreb", "Croatia");

            // Act

            // Assert
            Assert.AreNotEqual(valueObject1, valueObject2, "Two ValueObjects aren't equal.");
            Assert.AreNotEqual(valueObject1.GetHashCode(), valueObject2.GetHashCode(), "Two ValueObjects have different hashcodes.");
        }