如何使用 Microsoft Fakes 填充 XmlDocument.load

How to shim XmlDocument.load using Microsoft Fakes

    var xml = new XmlDocument();
    xml.LoadXml("<add name=\"console\" type=\"DefaultTraceLoader\" value=\"Error\"/>");

    string path = @"D:\Config.xml";
    System.IO.Fakes.ShimFile.ExistsString = p => true;

                    System.Xml.Fakes.ShimXmlDocument.AllInstances.LoadString = (a,b)=>
                    {
                        a = xDoc;
                        b = path;
                    };

System.Xml.fakes:

<Fakes xmlns="http://schemas.microsoft.com/fakes/2011/">
  <Assembly Name="System.Xml" Version="4.0.0.0"/>
  <ShimGeneration>
    <Add FullName="System.Xml.XmlDocument!"/>
  </ShimGeneration>
</Fakes>

我正在编写一个单元测试用例来填充 xml 文档加载 method.when 我调试的原始项目不是 return 在 xml 文档之上。我是否没有以正确的方式将 loadstring 函数加载到 return 主项目中预期的 xml 文档?

ShimXmlDocument.AllInstances.LoadString = (a,b)=> 
{
    a = xDoc;
    b = path;
};

如果将“a”作为 ref 参数传递,它会按您预期的那样工作。事实并非如此,因此您不能更改它指向 lambda 函数之外的对象,即在被测方法中。

您可以通过如下修改 lambda 来实现您想要的效果:

ShimXmlDocument.AllInstances.LoadString = (a,b)=>
{
   a.LoadXml("<add name=\"console\" type=\"DefaultTraceLoader\" value=\"Error\"/>");
};