如何使用Microsoft Fakes在VS 2013中存储XMLDocument

时间:2015-05-21 15:49:13

标签: c# unit-testing mstest microsoft-fakes

我有以下TestMethod我正在使用VS 2013进行测试,而我正在使用Microsoft Fakes。

[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如果我必须使用Stub,应该如何修改它并且使用存根而不是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);  

1 个答案:

答案 0 :(得分:0)

我认为可以使用Microsoft Fakes来存根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);
    }