Assert.AreEqual(a,b)
等同于 Assert.IsTrue(Object.Equals(a,b))
HttpStatusCodeResult
没有实现 Equals
方法,所以调用默认的 Object.Equals()
方法,该方法又默认调用了 Object.ReferenceEquals(a,b)
方法。
如果当前实例是引用类型,则 Equals(Object) 方法会测试引用相等性。调用 Equals(Object) 方法等同于调用 ReferenceEquals 方法。引用相等性意味着被比较的对象变量引用同一个对象。
我认为HttpStatusCode类的equals方法是根据引用键来比较的,我测试了您的设置,我的断言也失败了。不过,直接断言状态码本身是可以正常工作的。例如:
[TestMethod]
public void Test()
{
var resultOne = new HttpStatusCodeResult(400, null);
var resultTwo = new HttpStatusCodeResult(400, null);
// Assert
Assert.AreEqual(resultOne.StatusCode, resultTwo.StatusCode);
Assert.AreEqual(resultOne, resultTwo);
}
Assert.AreEqual(resultOne.StatusCode, resultTwo.StatusCode);
对比成功,而Assert.AreEqual(resultOne, resultTwo);
对比失败。
更新
请查看MSDN页面了解HttpStatusCodeResult的详细信息。在该页面中,您可以看到其等于实现是从Object继承的,因此不会涉及对象中的属性,而只会查看引用键。