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

krr*_*hna 5 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);            
}
Run Code Online (Sandbox Code Playgroud)

对于上面的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);  
Run Code Online (Sandbox Code Playgroud)

s3r*_*h86 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);
    }
Run Code Online (Sandbox Code Playgroud)