【问题标题】:How to shim XmlDocument.load using Microsoft Fakes如何使用 Microsoft Fakes 填充 XmlDocument.load
【发布时间】:2020-05-28 16:22:51
【问题描述】:
    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>

我正在编写一个单元测试用例来填充 xmldocument 加载方法。当我调试原始项目时,它没有返回到 xmldocument 以上。我是否没有为 loadstring 函数在主项目中返回预期的 xml 文档做正确的方法?

【问题讨论】:

    标签: c# unit-testing microsoft-fakes


    【解决方案1】:
    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\"/>");
    };
    

    【讨论】:

      猜你喜欢
      • 2018-11-01
      • 1970-01-01
      • 1970-01-01
      • 2013-07-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-06-19
      • 2013-09-07
      相关资源
      最近更新 更多