public void GivenValueDescriptor_ThenItCanBeComparedWihtOthers() { var value1 = new ValueDescriptor { Reference = "a" }; var value2 = new ValueDescriptor { Reference = "a" }; var value3 = new ValueDescriptor { Reference = "a" }; Assert.Equal(value1, value2); Assert.Equal(value2, value3); Assert.Equal(value3, value1); Assert.True(value1.Equals(value1)); Assert.True(value1.Equals(value2)); Assert.True(value1.Equals((object)value2)); Assert.False(value1.Equals(null)); Assert.False(value1.Equals(new object())); // ValueDescriptor is a mutable object, I prefer to do not // override == and != ooperators and keep original behavior (reference comparison) Assert.True(value1 != value2); Assert.False(value1 == null); }