public void DamageEqualsAndHashCode() { Damage damage = new Damage(DamageType.Chaos, 10, 2); //Using IsTrue/IsFalse to cover all paths (aren't covered, when using Equals) //Equal tests Assert.IsTrue(damage.Equals(damage)); Assert.AreEqual(damage.GetHashCode(), damage.GetHashCode()); object equal = new Damage(DamageType.Chaos, 10, 2); Assert.IsTrue(damage.Equals(equal)); Assert.AreEqual(equal.GetHashCode(), damage.GetHashCode()); //Not equal tests Assert.IsFalse(damage.Equals(null)); object notEqual = new object(); Assert.IsFalse(damage.Equals(notEqual)); Assert.AreNotEqual(notEqual.GetHashCode(), damage.GetHashCode()); notEqual = new Damage(DamageType.Magic, 10, 2); Assert.IsFalse(damage.Equals(notEqual)); Assert.AreNotEqual(notEqual.GetHashCode(), damage.GetHashCode()); notEqual = new Damage(DamageType.Chaos, 5, 2); Assert.IsFalse(damage.Equals(notEqual)); Assert.AreNotEqual(notEqual.GetHashCode(), damage.GetHashCode()); notEqual = new Damage(DamageType.Chaos, 10, 0); Assert.IsFalse(damage.Equals(notEqual)); Assert.AreNotEqual(notEqual.GetHashCode(), damage.GetHashCode()); }