2012-06-24 39 views
0

我是單元測試新手,所以可能是我做錯了什麼。Assert.AreEqual失敗。預計:<XmlResult>。實際:<XmlResult>

我有一些XmlResult類:

public class XmlResult : ActionResult 
    { 
     public XmlDocument Document { private get; set; } 

     public override void ExecuteResult(ControllerContext context) 
     { 
      //Do something 
     } 
    } 

我也有控制器擴展方法:

public static class ControllerExtensions 
    { 
     public static XmlResult Xml(this Controller controller, XmlDocument document) 
     { 
      return new XmlResult { Document = document }; 
     } 
    } 

和測試方法:

[TestClass] 
    public class ControllerExtensionsTests 
    { 
     #region Xml 
     [TestMethod] 
     public void XmlExtensionShouldReturnCorrectValue() 
     { 
      // Arrange 
      var mockRepository = new Mock<T>(); 
      var productsController = new ProductController(mockProductRepository.Object); 

      var someXmlDocument = new XmlDocument(); 

      // Act 
      var actual = productsController.Xml(someXmlDocument); 
      var expected = new XmlResult { Document = someXmlDocument }; 

      // Assert 
      Assert.AreEqual(expected, actual);    
     } 
     #endregion 
    } 

而且磨片我打電話Assert.AreEqual(expected, actual);我的測試失敗,消息"Assert.AreEqual failed. Expected:<XmlResult>. Actual:<XmlResult>."。我究竟做錯了什麼???

+3

預期,結果將是XmlResult的不同實例,所以他們不會是平等的。 – Douglas

+0

那麼爲什麼當我創建兩個不同的XmlResult實例,如:'var expected = new XmlResult {Document = someXmlDocument}; var actual = new XmlResult {Document = someXmlDocument};'測試通過? – Dmytro

+0

'productsController.Xml(someXmlDocument);'也在創建XmlResult的新實例,但只是在另一個方法 – Dmytro

回答

1

我會在您的xml結果類中添加一個重寫equals方法,併爲equals比較執行您自己的實現。

類似下面....

public class XmlResult : ActionResult 
{ 
    public XmlDocument Document { private get; set; } 

    public override void ExecuteResult(ControllerContext context) 
    { 
     //Do something 
    } 

    public bool Equals(XmlResult other) 
    { 
     if(ReferenceEquals(null, other)) 
     { 
      return false; 
     } 
     if(ReferenceEquals(this, other)) 
     { 
      return true; 
     } 
     return Equals(other.Document, Document); 
    } 

    public override int GetHashCode() 
    { 
     return (Document != null ? Document.GetHashCode() : 0); 
    } 
} 
相關問題