2015-05-21 47 views
5

我有下面TestMethod我使用VS 2013进行测试,我使用Microsoft Fakes。如何使用Microsoft Fakes存根VS 2013中的XMLDocument

[TestMethod]   
public void ConstructorTestForCMAClass() 
{ 
    XmlDocument doc = new XmlDocument(); 
    doc.LoadXml("<add name=\"console\" type=\"System.Diagnostics.DefaultTraceCMA\" value=\"Error\"/>"); 
    XmlAttributeCollection attrColl = doc.DocumentElement.Attributes; 
     CMATracer cMATracer = new CMATracer(attrColl);    
} 

对于上述TestMethod如果我必须使用存根,应该怎样modfied并且那将是使用存根,而不是XMLDocument一个好的做法呢?

我试过这个,但不知道这是否足够。

StubXmlDocument stubXmlDocument = new StubXmlDocument(); 
stubXmlDocument.LoadXml("<add name=\"console\" type=\"System.Diagnostics.DefaultTraceCMA\" value=\"Error\"/>"); 
//create a stub attribute collection 
XmlAttributeCollection attrCollection = stubXmlDocument.DocumentElement.Attributes; 
CMATracer cMATracer = new CMATracer(attrColl); 
+0

看来你的类正在测试(CMATracer)使用XmlAttributeCollection,所以你被嘲笑了错误的东西。请添加CMATracer的C'tor实现。 –

回答

0

我想它可以使用微软正版正货存根XmlDocument的,但存根最终会导致一个非常脆弱的测试,只要你改变底层实现中使用的方法调用,打破。

我的建议是检查你的xml之前和之后的状态。这样不管你的CMATracer代码有什么变化,你的测试仍然会通过。

[TestMethod] 
    public void ConstructorTestForCMAClass() 
    { 
     // Arrange 
     string xmlDocPreState = "<add name=\"console\" type=\"System.Diagnostics.DefaultTraceCMA\" value=\"Error\"/>"; 
     string xmlDocPostState = "Whatever..."; 

     XmlDocument doc = new XmlDocument(); 
     doc.LoadXml(xmlDocPreState); 
     XmlAttributeCollection attrColl = doc.DocumentElement.Attributes; 

     // Act 
     CMATracer cMATracer = new CMATracer(attrColl); 

     // Assert 
     Assert.AreEqual(xmlDocPostState, doc.OuterXml); 
    } 
相关问题